{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        }
      ],
      "name": "getCollateralInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getCollateralRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getHealthFactor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getMaxBorrowable",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getMaxWithdrawable",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "contract ERC20Token",
          "name": "_collateralToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "getVault",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Vault",
          "name": "_vaultContract",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_reliedUpon",
          "type": "address"
        }
      ],
      "name": "isReliedUpon",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50610f1e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a6e91adf1161005b578063a6e91adf14610120578063b09758f014610141578063c03d887114610154578063f44364c51461016757600080fd5b8063347c5d431461008257806354510b9d146100b55780635d242b97146100d8575b600080fd5b610095610090366004610b16565b61017a565b604080519384526020840192909252908201526060015b60405180910390f35b6100c86100c3366004610b16565b6101d7565b60405190151581526020016100ac565b6100eb6100e6366004610b61565b610231565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016100ac565b61013361012e366004610b16565b6102b7565b6040519081526020016100ac565b6100c861014f366004610b16565b61037d565b610133610162366004610b16565b6103fb565b610133610175366004610b16565b61050b565b60008060008061018b878787610557565b905060006101998888610627565b905060006101a889838561070e565b50905060008184604001516101bd9190610bb0565b8451602090950151949b949a509850929650505050505050565b6000806101e5858585610557565b905060006101f38686610627565b60808101515190915060000361020e5760019250505061022a565b600061021b87838561083f565b60409092015190911115925050505b9392505050565b6000806000806000806000806102478a8a610627565b905060006102548b6108de565b805160808401515191925060009161026c9190610bb0565b61027a906301e13380610bc3565b60e084015184516020860151604087015160c088015160a090980151929e50909c509a509498509096509450919250505092959891949750929550565b6000806102c5858585610557565b905060006102d38686610627565b6080810151519091506000036102ee5760009250505061022a565b60006102fb87838561070e565b509050600081846040015185602001516103159190610bb0565b61031f9190610bb0565b9050600061032d848361098b565b9050600061035f6103406012600a610cbe565b61034b906064610bc3565b6103559084610bc3565b86604001516109e1565b865190915061036f908290610cca565b9a9950505050505050505050565b604051635881fc3360e01b81526001600160a01b038381166004830152828116602483015260009190851690635881fc3390604401602060405180830381865afa1580156103cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f39190610cf1565b949350505050565b600080610409858585610557565b905060006104178686610627565b8251909150158061042b5750608081015151155b1561043b5760009250505061022a565b60006104478284610a21565b905060006104576012600a610cbe565b610462906064610bc3565b60408401516104719084610bc3565b61047b9190610d13565b9050600061048a89858761070e565b509050600081866040015187602001516104a49190610bb0565b6104ae9190610bb0565b905060006104bc8285610cca565b90506000811380156104d15750808660c00151105b1561036f576001600160ff1b038660c0015111156104f757506001600160ff1b0361036f565b5060c08501519a9950505050505050505050565b600080610519858585610557565b905060006105278686610627565b6080810151519091506000036105425760009250505061022a565b61054d86828461083f565b9695505050505050565b6105826040518060800160405280600081526020016000815260200160008152602001600081525090565b60405163e2c7283f60e01b81526001600160a01b038481166004830152838116602483015260009182918291829189169063e2c7283f90604401608060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd9190610d35565b60408051608081018252948552602085019390935291830152606082015298975050505050505050565b61062f610a90565b60008060008060008060008060008b6001600160a01b031663c665471f8c6040518263ffffffff1660e01b815260040161067891906001600160a01b0391909116815260200190565b61016060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190610d6b565b6040805161012081018252998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015299505050505050505050505b92915050565b6000806000856001600160a01b031663336d391e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190610e38565b6001600160a01b031663cf5696cb61078c886108de565b87608001516040518363ffffffff1660e01b81526004016107ae929190610e55565b602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610e8e565b905060006107ff6012600a610cbe565b61080a906064610bc3565b6020860151606087015161081e9085610ea7565b6108289190610bc3565b6108329190610d13565b9791965090945050505050565b60008061084d85858561070e565b509050600081846040015185602001516108679190610bb0565b6108719190610bb0565b9050806000036108865760009250505061022a565b835160000361089b576000199250505061022a565b60006108a78686610a21565b90506108d36108b86012600a610cbe565b6108c3906064610bc3565b6108cd9084610bc3565b826109e1565b979650505050505050565b61090260405180606001604052806000815260200160008152602001600081525090565b6000806000846001600160a01b03166313f60c9a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190610eba565b6040805160608101825293845260208401929092529082015295945050505050565b600061022a61099c6012600a610cbe565b6109a7906001610bc3565b6109b19084610bc3565b6101008501516109c290600a610cbe565b64e8d4a510008660a001516109d79190610bc3565b6109e19190610bc3565b6000816000036109f057600080fd5b82600003610a0057506000610708565b81610a0c600185610ea7565b610a169190610d13565b61022a906001610bb0565b600080610a306012600a610cbe565b610a3b906001610bc3565b64e8d4a510008560a00151610a54878760000151610a72565b610a5e9190610bc3565b610a689190610bc3565b6103f39190610d13565b6000826101000151600a610a869190610cbe565b61022a9083610bc3565b60405180610120016040528060008152602001600081526020016000815260200160008152602001610adc60405180606001604052806000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610b1357600080fd5b50565b600080600060608486031215610b2b57600080fd5b8335610b3681610afe565b92506020840135610b4681610afe565b91506040840135610b5681610afe565b809150509250925092565b60008060408385031215610b7457600080fd5b8235610b7f81610afe565b91506020830135610b8f81610afe565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070857610708610b9a565b808202811582820484141761070857610708610b9a565b600181815b80851115610c15578160001904821115610bfb57610bfb610b9a565b80851615610c0857918102915b93841c9390800290610bdf565b509250929050565b600082610c2c57506001610708565b81610c3957506000610708565b8160018114610c4f5760028114610c5957610c75565b6001915050610708565b60ff841115610c6a57610c6a610b9a565b50506001821b610708565b5060208310610133831016604e8410600b8410161715610c98575081810a610708565b610ca28383610bda565b8060001904821115610cb657610cb6610b9a565b029392505050565b600061022a8383610c1d565b8181036000831280158383131683831282161715610cea57610cea610b9a565b5092915050565b600060208284031215610d0357600080fd5b8151801515811461022a57600080fd5b600082610d3057634e487b7160e01b600052601260045260246000fd5b500490565b60008060008060808587031215610d4b57600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000806000806000806000806000898b03610160811215610d8b57600080fd5b8a51995060208b0151985060408b0151975060608b015196506060607f1982011215610db657600080fd5b506040516060810181811067ffffffffffffffff82111715610de857634e487b7160e01b600052604160045260246000fd5b806040525060808b0151815260a08b0151602082015260c08b015160408201528095505060e08a015193506101008a015192506101208a015191506101408a015190509295985092959850929598565b600060208284031215610e4a57600080fd5b815161022a81610afe565b8251815260208084015181830152604080850151818401528351606084015290830151608083015282015160a082015260c0810161022a565b600060208284031215610ea057600080fd5b5051919050565b8181038181111561070857610708610b9a565b600080600060608486031215610ecf57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122088a8bbf0e50731659250053affd0c6fd68855ae8488831075089108d8fcb0b1864736f6c63430008150033",
    "sourceMap": "262:15248:47:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a6e91adf1161005b578063a6e91adf14610120578063b09758f014610141578063c03d887114610154578063f44364c51461016757600080fd5b8063347c5d431461008257806354510b9d146100b55780635d242b97146100d8575b600080fd5b610095610090366004610b16565b61017a565b604080519384526020840192909252908201526060015b60405180910390f35b6100c86100c3366004610b16565b6101d7565b60405190151581526020016100ac565b6100eb6100e6366004610b61565b610231565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016100ac565b61013361012e366004610b16565b6102b7565b6040519081526020016100ac565b6100c861014f366004610b16565b61037d565b610133610162366004610b16565b6103fb565b610133610175366004610b16565b61050b565b60008060008061018b878787610557565b905060006101998888610627565b905060006101a889838561070e565b50905060008184604001516101bd9190610bb0565b8451602090950151949b949a509850929650505050505050565b6000806101e5858585610557565b905060006101f38686610627565b60808101515190915060000361020e5760019250505061022a565b600061021b87838561083f565b60409092015190911115925050505b9392505050565b6000806000806000806000806102478a8a610627565b905060006102548b6108de565b805160808401515191925060009161026c9190610bb0565b61027a906301e13380610bc3565b60e084015184516020860151604087015160c088015160a090980151929e50909c509a509498509096509450919250505092959891949750929550565b6000806102c5858585610557565b905060006102d38686610627565b6080810151519091506000036102ee5760009250505061022a565b60006102fb87838561070e565b509050600081846040015185602001516103159190610bb0565b61031f9190610bb0565b9050600061032d848361098b565b9050600061035f6103406012600a610cbe565b61034b906064610bc3565b6103559084610bc3565b86604001516109e1565b865190915061036f908290610cca565b9a9950505050505050505050565b604051635881fc3360e01b81526001600160a01b038381166004830152828116602483015260009190851690635881fc3390604401602060405180830381865afa1580156103cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f39190610cf1565b949350505050565b600080610409858585610557565b905060006104178686610627565b8251909150158061042b5750608081015151155b1561043b5760009250505061022a565b60006104478284610a21565b905060006104576012600a610cbe565b610462906064610bc3565b60408401516104719084610bc3565b61047b9190610d13565b9050600061048a89858761070e565b509050600081866040015187602001516104a49190610bb0565b6104ae9190610bb0565b905060006104bc8285610cca565b90506000811380156104d15750808660c00151105b1561036f576001600160ff1b038660c0015111156104f757506001600160ff1b0361036f565b5060c08501519a9950505050505050505050565b600080610519858585610557565b905060006105278686610627565b6080810151519091506000036105425760009250505061022a565b61054d86828461083f565b9695505050505050565b6105826040518060800160405280600081526020016000815260200160008152602001600081525090565b60405163e2c7283f60e01b81526001600160a01b038481166004830152838116602483015260009182918291829189169063e2c7283f90604401608060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd9190610d35565b60408051608081018252948552602085019390935291830152606082015298975050505050505050565b61062f610a90565b60008060008060008060008060008b6001600160a01b031663c665471f8c6040518263ffffffff1660e01b815260040161067891906001600160a01b0391909116815260200190565b61016060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190610d6b565b6040805161012081018252998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015299505050505050505050505b92915050565b6000806000856001600160a01b031663336d391e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190610e38565b6001600160a01b031663cf5696cb61078c886108de565b87608001516040518363ffffffff1660e01b81526004016107ae929190610e55565b602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610e8e565b905060006107ff6012600a610cbe565b61080a906064610bc3565b6020860151606087015161081e9085610ea7565b6108289190610bc3565b6108329190610d13565b9791965090945050505050565b60008061084d85858561070e565b509050600081846040015185602001516108679190610bb0565b6108719190610bb0565b9050806000036108865760009250505061022a565b835160000361089b576000199250505061022a565b60006108a78686610a21565b90506108d36108b86012600a610cbe565b6108c3906064610bc3565b6108cd9084610bc3565b826109e1565b979650505050505050565b61090260405180606001604052806000815260200160008152602001600081525090565b6000806000846001600160a01b03166313f60c9a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190610eba565b6040805160608101825293845260208401929092529082015295945050505050565b600061022a61099c6012600a610cbe565b6109a7906001610bc3565b6109b19084610bc3565b6101008501516109c290600a610cbe565b64e8d4a510008660a001516109d79190610bc3565b6109e19190610bc3565b6000816000036109f057600080fd5b82600003610a0057506000610708565b81610a0c600185610ea7565b610a169190610d13565b61022a906001610bb0565b600080610a306012600a610cbe565b610a3b906001610bc3565b64e8d4a510008560a00151610a54878760000151610a72565b610a5e9190610bc3565b610a689190610bc3565b6103f39190610d13565b6000826101000151600a610a869190610cbe565b61022a9083610bc3565b60405180610120016040528060008152602001600081526020016000815260200160008152602001610adc60405180606001604052806000815260200160008152602001600081525090565b8152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114610b1357600080fd5b50565b600080600060608486031215610b2b57600080fd5b8335610b3681610afe565b92506020840135610b4681610afe565b91506040840135610b5681610afe565b809150509250925092565b60008060408385031215610b7457600080fd5b8235610b7f81610afe565b91506020830135610b8f81610afe565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070857610708610b9a565b808202811582820484141761070857610708610b9a565b600181815b80851115610c15578160001904821115610bfb57610bfb610b9a565b80851615610c0857918102915b93841c9390800290610bdf565b509250929050565b600082610c2c57506001610708565b81610c3957506000610708565b8160018114610c4f5760028114610c5957610c75565b6001915050610708565b60ff841115610c6a57610c6a610b9a565b50506001821b610708565b5060208310610133831016604e8410600b8410161715610c98575081810a610708565b610ca28383610bda565b8060001904821115610cb657610cb6610b9a565b029392505050565b600061022a8383610c1d565b8181036000831280158383131683831282161715610cea57610cea610b9a565b5092915050565b600060208284031215610d0357600080fd5b8151801515811461022a57600080fd5b600082610d3057634e487b7160e01b600052601260045260246000fd5b500490565b60008060008060808587031215610d4b57600080fd5b505082516020840151604085015160609095015191969095509092509050565b6000806000806000806000806000898b03610160811215610d8b57600080fd5b8a51995060208b0151985060408b0151975060608b015196506060607f1982011215610db657600080fd5b506040516060810181811067ffffffffffffffff82111715610de857634e487b7160e01b600052604160045260246000fd5b806040525060808b0151815260a08b0151602082015260c08b015160408201528095505060e08a015193506101008a015192506101208a015191506101408a015190509295985092959850929598565b600060208284031215610e4a57600080fd5b815161022a81610afe565b8251815260208084015181830152604080850151818401528351606084015290830151608083015282015160a082015260c0810161022a565b600060208284031215610ea057600080fd5b5051919050565b8181038181111561070857610708610b9a565b600080600060608486031215610ecf57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122088a8bbf0e50731659250053affd0c6fd68855ae8488831075089108d8fcb0b1864736f6c63430008150033",
    "sourceMap": "262:15248:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8151:672;;;;;;:::i;:::-;;:::i;:::-;;;;949:25:51;;;1005:2;990:18;;983:34;;;;1033:18;;;1026:34;937:2;922:18;8151:672:47;;;;;;;;2482:587;;;;;;:::i;:::-;;:::i;:::-;;;1236:14:51;;1229:22;1211:41;;1199:2;1184:18;2482:587:47;1071:187:51;8902:825:47;;;;;;:::i;:::-;;:::i;:::-;;;;2020:25:51;;;2076:2;2061:18;;2054:34;;;;2104:18;;;2097:34;;;;2162:2;2147:18;;2140:34;;;;2205:3;2190:19;;2183:35;2249:3;2234:19;;2227:35;2293:3;2278:19;;2271:35;2007:3;1992:19;8902:825:47;1705:607:51;6689:1225:47;;;;;;:::i;:::-;;:::i;:::-;;;2461:25:51;;;2449:2;2434:18;6689:1225:47;2317:175:51;9852:181:47;;;;;;:::i;:::-;;:::i;4043:2066::-;;;;;;:::i;:::-;;:::i;3143:500::-;;;;;;:::i;:::-;;:::i;8151:672::-;8283:7;8292;8301;8324:30;8357:58;8374:14;8390:16;8408:6;8357:16;:58::i;:::-;8324:91;;8425:40;8468:55;8490:14;8506:16;8468:21;:55::i;:::-;8425:98;;8570:27;8602:58;8624:14;8640:11;8653:6;8602:21;:58::i;:::-;8569:91;;;8670:20;8714:19;8693:6;:18;;;:40;;;;:::i;:::-;8752:26;;8780:21;;;;;8752:26;;8780:21;;-1:-1:-1;8780:21:47;-1:-1:-1;8151:672:47;;-1:-1:-1;;;;;;;8151:672:47:o;2482:587::-;2621:4;2641:30;2674:58;2691:14;2707:16;2725:6;2674:16;:58::i;:::-;2641:91;;2742:40;2785:55;2807:14;2823:16;2785:21;:55::i;:::-;2855:20;;;;:25;2742:98;;-1:-1:-1;2855:25:47;:30;2851:47;;2894:4;2887:11;;;;;;2851:47;2909:24;2936:56;2956:14;2972:11;2985:6;2936:19;:56::i;:::-;3030:32;;;;;3010:52;;;;;-1:-1:-1;;;2482:587:47;;;;;;:::o;8902:825::-;9027:7;9036;9045;9054;9063;9072;9081;9104:40;9147:55;9169:14;9185:16;9147:21;:55::i;:::-;9104:98;;9213:36;9252:32;9269:14;9252:16;:32::i;:::-;9339:18;;9311:20;;;;:25;9213:71;;-1:-1:-1;9294:13:47;;9311:46;;9339:18;9311:46;:::i;:::-;9310:59;;9361:8;9310:59;:::i;:::-;9401:38;;;;9471:36;;9521:31;;;;9566:32;;;;9612:23;;;;9693:17;;;;;9471:36;;-1:-1:-1;9521:31:47;;-1:-1:-1;9566:32:47;-1:-1:-1;9612:23:47;;-1:-1:-1;9294:75:47;;-1:-1:-1;9401:38:47;-1:-1:-1;9693:17:47;;-1:-1:-1;;;8902:825:47;;;;;;;;;;:::o;6689:1225::-;6831:6;6853:30;6886:58;6903:14;6919:16;6937:6;6886:16;:58::i;:::-;6853:91;;6954:40;6997:55;7019:14;7035:16;6997:21;:55::i;:::-;7067:20;;;;:25;6954:98;;-1:-1:-1;7067:25:47;:30;7063:44;;7106:1;7099:8;;;;;;7063:44;7155:27;7187:58;7209:14;7225:11;7238:6;7187:21;:58::i;:::-;7154:91;;;7255:23;7326:19;7305:6;:18;;;7281:6;:21;;;:42;;;;:::i;:::-;:64;;;;:::i;:::-;7255:90;;7412:42;7457:67;7495:11;7508:15;7457:37;:67::i;:::-;7412:112;-1:-1:-1;7575:50:47;7640:99;466:22;334:2;466;:22;:::i;:::-;459:30;;:3;:30;:::i;:::-;7648:55;;:34;:55;:::i;:::-;7706:11;:32;;;7640:6;:99::i;:::-;7827:26;;7575:164;;-1:-1:-1;7820:87:47;;7575:164;;7820:87;:::i;:::-;7813:94;6689:1225;-1:-1:-1;;;;;;;;;;6689:1225:47:o;9852:181::-;9979:47;;-1:-1:-1;;;9979:47:47;;-1:-1:-1;;;;;5493:15:51;;;9979:47:47;;;5475:34:51;5545:15;;;5525:18;;;5518:43;9956:4:47;;9979:26;;;;;;5410:18:51;;9979:47:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9972:54;9852:181;-1:-1:-1;;;;9852:181:47:o;4043:2066::-;4183:6;4205:30;4238:58;4255:14;4271:16;4289:6;4238:16;:58::i;:::-;4205:91;;4306:40;4349:55;4371:14;4387:16;4349:21;:55::i;:::-;4466:26;;4306:98;;-1:-1:-1;4466:31:47;;:65;;-1:-1:-1;4501:20:47;;;;:25;:30;4466:65;4462:79;;;4540:1;4533:8;;;;;;4462:79;4587:34;4624:50;4654:11;4667:6;4624:29;:50::i;:::-;4587:87;-1:-1:-1;4738:42:47;466:22;334:2;466;:22;:::i;:::-;459:30;;:3;:30;:::i;:::-;4825:32;;;;4796:61;;:26;:61;:::i;:::-;4795:84;;;;:::i;:::-;4738:141;;4927:27;4959:58;4981:14;4997:11;5010:6;4959:21;:58::i;:::-;4926:91;;;5027:23;5098:19;5077:6;:18;;;5053:6;:21;;;:42;;;;:::i;:::-;:64;;;;:::i;:::-;5027:90;-1:-1:-1;5128:26:47;5157:68;5027:90;5164:34;5157:68;:::i;:::-;5128:97;;5467:1;5445:19;:23;:81;;;;;5506:19;5472:11;:23;;;:54;5445:81;5441:392;;;-1:-1:-1;;;;;5546:11:47;:23;;;:51;5542:280;;;-1:-1:-1;;;;;;5542:280:47;;;-1:-1:-1;5798:23:47;;;;6083:19;4043:2066;-1:-1:-1;;;;;;;;;;4043:2066:47:o;3143:500::-;3285:7;3308:30;3341:58;3358:14;3374:16;3392:6;3341:16;:58::i;:::-;3308:91;;3409:40;3452:55;3474:14;3490:16;3452:21;:55::i;:::-;3522:20;;;;:25;3409:98;;-1:-1:-1;3522:25:47;:30;3518:44;;3561:1;3554:8;;;;;;3518:44;3580:56;3600:14;3616:11;3629:6;3580:19;:56::i;:::-;3573:63;3143:500;-1:-1:-1;;;;;;3143:500:47:o;559:471::-;698:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;698:23:47;860:53;;-1:-1:-1;;;860:53:47;;-1:-1:-1;;;;;5493:15:51;;;860:53:47;;;5475:34:51;5545:15;;;5525:18;;;5518:43;738:27:47;;;;;;;;860;;;;;5410:18:51;;860:53:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;931:92;;;;;;;;;;;;;;;;;;;;;;;;;;;559:471;-1:-1:-1;;;;;;;;559:471:47:o;1320:945::-;1448:28;;:::i;:::-;1506:32;1552:27;1593:28;1635:24;1673:30;1717:13;1744:19;1777:34;1825:37;1875:14;-1:-1:-1;;;;;1875:32:47;;1908:16;1875:50;;;;;;;;;;;;;;-1:-1:-1;;;;;6962:32:51;;;;6944:51;;6932:2;6917:18;;6778:223;1875:50:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1943:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;1320:945:47;;;;;:::o;12948:625::-;13128:7;13137;13156:36;13195:14;-1:-1:-1;;;;;13195:25:47;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13195:64:47;;13273:32;13290:14;13273:16;:32::i;:::-;13307:11;:20;;;13195:142;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13156:181;-1:-1:-1;13348:20:47;466:22;334:2;466;:22;:::i;:::-;459:30;;:3;:30;:::i;:::-;13452:21;;;;13417:31;;;;13386:62;;:28;:62;:::i;:::-;13385:88;;;;:::i;:::-;13371:133;;;;:::i;:::-;13348:156;13537:28;;-1:-1:-1;12948:625:47;;-1:-1:-1;;;;;12948:625:47:o;10307:1407::-;10485:7;10851:31;10887:58;10909:14;10925:11;10938:6;10887:21;:58::i;:::-;10850:95;;;10955:22;11025:23;11004:6;:18;;;10980:6;:21;;;:42;;;;:::i;:::-;:68;;;;:::i;:::-;10955:93;;11102:14;11120:1;11102:19;11098:33;;11130:1;11123:8;;;;;;11098:33;11300:26;;;:31;11296:61;;-1:-1:-1;;11333:24:47;;;;;;11296:61;11482:34;11519:50;11549:11;11562:6;11519:29;:50::i;:::-;11482:87;-1:-1:-1;11634:73:47;466:22;334:2;466;:22;:::i;:::-;459:30;;:3;:30;:::i;:::-;11642:35;;:14;:35;:::i;:::-;11680:26;11634:6;:73::i;:::-;11627:80;10307:1407;-1:-1:-1;;;;;;;10307:1407:47:o;1036:278::-;1106:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;1106:22:47;1141:12;1155:23;1180:22;1206:14;-1:-1:-1;;;;;1206:27:47;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1253:54;;;;;;;;;;;;;;;;;;;;;;;1036:278;-1:-1:-1;;;;;1036:278:47:o;12454:354::-;12607:7;12637:164;384:22;334:2;384;:22;:::i;:::-;379:28;;:1;:28;:::i;:::-;12658:19;;:7;:19;:::i;:::-;12748:41;;;;12742:47;;:2;:47;:::i;:::-;548:4;12693:11;:17;;;:45;;;;:::i;:::-;:97;;;;:::i;:::-;15392:10;15418:2;15424:1;15418:7;15414:21;;15427:8;;;15414:21;15449:2;15455:1;15449:7;15445:21;;-1:-1:-1;15465:1:47;15458:8;;15445:21;15498:2;15488:6;15493:1;15488:2;:6;:::i;:::-;15487:13;;;;:::i;:::-;15482:19;;:1;:19;:::i;11861:446::-;12021:7;;384:22;334:2;384;:22;:::i;:::-;379:28;;:1;:28;:::i;:::-;548:4;12174:11;:17;;;12095:76;12131:11;12144:6;:26;;;12095:35;:76::i;:::-;:96;;;;:::i;:::-;:140;;;;:::i;:::-;12081:176;;;;:::i;14826:245::-;14976:7;15022:11;:41;;;15016:2;:47;;;;:::i;:::-;15006:58;;:6;:58;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:138:51:-;-1:-1:-1;;;;;96:31:51;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:585::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;393:9;380:23;412:38;444:5;412:38;:::i;:::-;469:5;-1:-1:-1;526:2:51;511:18;;498:32;539:40;498:32;539:40;:::i;:::-;598:7;-1:-1:-1;657:2:51;642:18;;629:32;670:40;629:32;670:40;:::i;:::-;729:7;719:17;;;157:585;;;;;:::o;1263:437::-;1366:6;1374;1427:2;1415:9;1406:7;1402:23;1398:32;1395:52;;;1443:1;1440;1433:12;1395:52;1482:9;1469:23;1501:38;1533:5;1501:38;:::i;:::-;1558:5;-1:-1:-1;1615:2:51;1600:18;;1587:32;1628:40;1587:32;1628:40;:::i;:::-;1687:7;1677:17;;;1263:437;;;;;:::o;3249:127::-;3310:10;3305:3;3301:20;3298:1;3291:31;3341:4;3338:1;3331:15;3365:4;3362:1;3355:15;3381:125;3446:9;;;3467:10;;;3464:36;;;3480:18;;:::i;3511:168::-;3584:9;;;3615;;3632:15;;;3626:22;;3612:37;3602:71;;3653:18;;:::i;3684:422::-;3773:1;3816:5;3773:1;3830:270;3851:7;3841:8;3838:21;3830:270;;;3910:4;3906:1;3902:6;3898:17;3892:4;3889:27;3886:53;;;3919:18;;:::i;:::-;3969:7;3959:8;3955:22;3952:55;;;3989:16;;;;3952:55;4068:22;;;;4028:15;;;;3830:270;;;3834:3;3684:422;;;;;:::o;4111:806::-;4160:5;4190:8;4180:80;;-1:-1:-1;4231:1:51;4245:5;;4180:80;4279:4;4269:76;;-1:-1:-1;4316:1:51;4330:5;;4269:76;4361:4;4379:1;4374:59;;;;4447:1;4442:130;;;;4354:218;;4374:59;4404:1;4395:10;;4418:5;;;4442:130;4479:3;4469:8;4466:17;4463:43;;;4486:18;;:::i;:::-;-1:-1:-1;;4542:1:51;4528:16;;4557:5;;4354:218;;4656:2;4646:8;4643:16;4637:3;4631:4;4628:13;4624:36;4618:2;4608:8;4605:16;4600:2;4594:4;4591:12;4587:35;4584:77;4581:159;;;-1:-1:-1;4693:19:51;;;4725:5;;4581:159;4772:34;4797:8;4791:4;4772:34;:::i;:::-;4842:6;4838:1;4834:6;4830:19;4821:7;4818:32;4815:58;;;4853:18;;:::i;:::-;4891:20;;4111:806;-1:-1:-1;;;4111:806:51:o;4922:131::-;4982:5;5011:36;5038:8;5032:4;5011:36;:::i;5058:200::-;5124:9;;;5097:4;5152:9;;5180:10;;5192:12;;;5176:29;5215:12;;;5207:21;;5173:56;5170:82;;;5232:18;;:::i;:::-;5170:82;5058:200;;;;:::o;5572:277::-;5639:6;5692:2;5680:9;5671:7;5667:23;5663:32;5660:52;;;5708:1;5705;5698:12;5660:52;5740:9;5734:16;5793:5;5786:13;5779:21;5772:5;5769:32;5759:60;;5815:1;5812;5805:12;5854:217;5894:1;5920;5910:132;;5964:10;5959:3;5955:20;5952:1;5945:31;5999:4;5996:1;5989:15;6027:4;6024:1;6017:15;5910:132;-1:-1:-1;6056:9:51;;5854:217::o;6405:368::-;6502:6;6510;6518;6526;6579:3;6567:9;6558:7;6554:23;6550:33;6547:53;;;6596:1;6593;6586:12;6547:53;-1:-1:-1;;6619:16:51;;6675:2;6660:18;;6654:25;6719:2;6704:18;;6698:25;6763:2;6748:18;;;6742:25;6619:16;;6654:25;;-1:-1:-1;6742:25:51;;-1:-1:-1;6405:368:51;-1:-1:-1;6405:368:51:o;7006:1231::-;7175:6;7183;7191;7199;7207;7215;7223;7231;7239;7283:9;7274:7;7270:23;7313:3;7309:2;7305:12;7302:32;;;7330:1;7327;7320:12;7302:32;7359:9;7353:16;7343:26;;7409:2;7398:9;7394:18;7388:25;7378:35;;7453:2;7442:9;7438:18;7432:25;7422:35;;7497:2;7486:9;7482:18;7476:25;7466:35;;7536:2;7529:3;7525:8;7521:2;7517:17;7513:26;7510:46;;;7552:1;7549;7542:12;7510:46;;7585:2;7579:9;7627:2;7619:6;7615:15;7696:6;7684:10;7681:22;7660:18;7648:10;7645:34;7642:62;7639:185;;;7746:10;7741:3;7737:20;7734:1;7727:31;7781:4;7778:1;7771:15;7809:4;7806:1;7799:15;7639:185;7844:10;7840:2;7833:22;;7900:3;7889:9;7885:19;7879:26;7871:6;7864:42;7960:3;7949:9;7945:19;7939:26;7934:2;7926:6;7922:15;7915:51;8020:3;8009:9;8005:19;7999:26;7994:2;7986:6;7982:15;7975:51;8045:6;8035:16;;;8091:3;8080:9;8076:19;8070:26;8060:36;;8136:3;8125:9;8121:19;8115:26;8105:36;;8181:3;8170:9;8166:19;8160:26;8150:36;;8226:3;8215:9;8211:19;8205:26;8195:36;;7006:1231;;;;;;;;;;;:::o;8242:273::-;8327:6;8380:2;8368:9;8359:7;8355:23;8351:32;8348:52;;;8396:1;8393;8386:12;8348:52;8428:9;8422:16;8447:38;8479:5;8447:38;:::i;8730:397::-;8594:12;;8582:25;;8656:4;8645:16;;;8639:23;8623:14;;;8616:47;8712:4;8701:16;;;8695:23;8679:14;;;8672:47;8594:12;;9117:2;9102:18;;8582:25;8645:16;;;8639:23;8623:14;;;8616:47;8701:16;;8695:23;8679:14;;;8672:47;9000:3;8985:19;;9067:54;8520:205;9132:184;9202:6;9255:2;9243:9;9234:7;9230:23;9226:32;9223:52;;;9271:1;9268;9261:12;9223:52;-1:-1:-1;9294:16:51;;9132:184;-1:-1:-1;9132:184:51:o;9321:128::-;9388:9;;;9409:11;;;9406:37;;;9423:18;;:::i;9454:306::-;9542:6;9550;9558;9611:2;9599:9;9590:7;9586:23;9582:32;9579:52;;;9627:1;9624;9617:12;9579:52;9656:9;9650:16;9640:26;;9706:2;9695:9;9691:18;9685:25;9675:35;;9750:2;9739:9;9735:18;9729:25;9719:35;;9454:306;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "getCollateralInfo(address,address)": "5d242b97",
    "getCollateralRatio(address,address,address)": "f44364c5",
    "getHealthFactor(address,address,address)": "54510b9d",
    "getMaxBorrowable(address,address,address)": "c03d8871",
    "getMaxWithdrawable(address,address,address)": "a6e91adf",
    "getVault(address,address,address)": "347c5d43",
    "isReliedUpon(address,address,address)": "b09758f0"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"}],\"name\":\"getCollateralInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getCollateralRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getHealthFactor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getMaxBorrowable\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getMaxWithdrawable\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"contract ERC20Token\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Vault\",\"name\":\"_vaultContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_reliedUpon\",\"type\":\"address\"}],\"name\":\"isReliedUpon\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getCollateralInfo(address,address)\":{\"details\":\"returns a the relevant info for a collateral\"},\"getCollateralRatio(address,address,address)\":{\"details\":\"returns the collateral ratio of a vault\"},\"getHealthFactor(address,address,address)\":{\"details\":\"returns health factor (if a vault is liquidatable or not) of a vault\"},\"getMaxBorrowable(address,address,address)\":{\"details\":\"returns the max amount of currency a vault owner can mint for that vault without the tx reverting due to the vault's health factor falling below the min health factorif it's a negative number then the vault is below the min health factor already and paying back the additive inverse of the result will pay back both borrowed amount and interest accrued\"},\"getMaxWithdrawable(address,address,address)\":{\"details\":\"returns the max amount of collateral a vault owner can withdraw from a vault without the tx reverting due to the vault's health factor falling below the min health factorif it's a negative number then the vault is below the min health factor already and depositing the additive inverse will put the position at the min health factor saving it from liquidation.the recommended way to do this is to burn/pay back the additive inverse of the result of `getMaxBorrowable()` that way interest would not accrue after payment.\"},\"getVault(address,address,address)\":{\"details\":\"returns a vault's relevant info i.e the depositedCollateral, borrowedAmount, and updated accruedFeesrecommended to read the accrued fees from here as it'll be updated before being returned.\"},\"isReliedUpon(address,address,address)\":{\"details\":\"returns if _owner has approved _reliedUpon to interact with _owner's vault on their behalf\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/vaultGetters.sol\":\"VaultGetters\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/protocol-core/lib/openzeppelin-contracts/contracts/\",\":descent-collective/oracle-module/=lib/protocol-core/lib/oracle-module/src/\",\":descent-collective/protocol-core/=lib/protocol-core/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/protocol-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/protocol-core/lib/openzeppelin-contracts/\",\":oracle-module/=lib/protocol-core/lib/oracle-module/\",\":permit2/=lib/permit2/src/\",\":protocol-core/=lib/protocol-core/\",\":solady/=lib/protocol-core/lib/solady/src/\",\":solmate/=lib/permit2/lib/solmate/\"]},\"sources\":{\"lib/protocol-core/lib/solady/src/auth/Ownable.sol\":{\"keccak256\":\"0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3\",\"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs\"]},\"lib/protocol-core/lib/solady/src/tokens/ERC20.sol\":{\"keccak256\":\"0xb4a3f9ba8a05107f7370de42cff57f3ad26dafd438712c11531a5892de2f59e0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f0a9ca06e3cf6dea1f9a4c5599581573b7d81cd64dc3afb582f325ccf5fdd6dc\",\"dweb:/ipfs/Qmb9r5dDceNF4W8S5u6i85RsNTgE5XG9HbTXkyS25ad3C6\"]},\"lib/protocol-core/lib/solady/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a\",\"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg\"]},\"lib/protocol-core/src/currency.sol\":{\"keccak256\":\"0xc266e97010a71e6ac755dce3e51a5a5844663b355e20ab40bf2020fd9308369b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d2660220b8a14c6d06351765dd7accec03e350e7fa9ae960c1505bea1e5d8d2d\",\"dweb:/ipfs/QmdYdPSnQC2nym38Fca4vRLKU4A78AQkgYasdg3TaRLGNY\"]},\"lib/protocol-core/src/helpers/pausable.sol\":{\"keccak256\":\"0x8acce52dcd450c73da0f77d9539962826da23aca05aa7d0c7568614e89aed997\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://35e2f674e01c0d6107f31d1c32bb2780d442420b7d26636f560a4eb1007f4a8b\",\"dweb:/ipfs/QmWwVLUGiJq6Q3fK6Zhx4pc6kaqC73pkZ1ntfVA3QCHTpd\"]},\"lib/protocol-core/src/interfaces/ICurrency.sol\":{\"keccak256\":\"0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998\",\"dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz\"]},\"lib/protocol-core/src/interfaces/IRate.sol\":{\"keccak256\":\"0x166dc423b74b60302197a27fb64557ee8ef6bafe416deb08fe7ecf94f0ede1d1\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://123ef521857e33b10b6f92b743831b26dd5100e57271353bf5c1882fc41c6a2e\",\"dweb:/ipfs/QmdK5y8SntLHAVoNRq6isddmNYunrpv1JxAxyEgRiHdAAj\"]},\"lib/protocol-core/src/interfaces/IVault.sol\":{\"keccak256\":\"0x5684f59679e090ebe583d31fda6d8882469436e71670a4873151793675c7c6c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b265c21b1ff01a8c5cf9b1120feb6b5419a96a0e2a6d1ff4bdd89934c7869c9c\",\"dweb:/ipfs/QmdbCgiYE763cAHZ6nevhf7EzF8BzEkfwsbw4qWuxBkm8f\"]},\"lib/protocol-core/src/mocks/ERC20Token.sol\":{\"keccak256\":\"0x62b878fb4dde1f455866e0c1290cc50714805d02c2848a4a9bb33c5dfbc8464d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7af3f5638d366abfbca3186813449259a33ed43e7c13ec983d389d73df1ad204\",\"dweb:/ipfs/QmeMdoEVTGqdcgSicTTcmycSQjToT7Sn5ZTgZdVFH9E6HA\"]},\"lib/protocol-core/src/vault.sol\":{\"keccak256\":\"0x5dc74b51eb4f221c7a6e78f7557819a8f0087ffa27cac805557bd886b806f584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://37dc93c378f13a42a21cd3a4718cade7ef3627d5d0d187819010cfefb1387b3a\",\"dweb:/ipfs/QmTn3XKb5q4oQ1AdiVvJ4HMF8Vh9STxv9xyBgFT8jF7riC\"]},\"src/vaultGetters.sol\":{\"keccak256\":\"0xefed495a592a80cba0995a919d2f72a92f4ae176208b4775fd57a354657c78b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f340f53cd7374e82143c022a991a9617d8c4558ebcc678654b38bde6a2874d1\",\"dweb:/ipfs/Qmbr5wF8d9oRiEDj92MreZBgMwf1nZKbkEQgTGRVs7cbX5\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.21+commit.d9974bed"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getCollateralInfo",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getCollateralRatio",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getHealthFactor",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMaxBorrowable",
          "outputs": [
            {
              "internalType": "int256",
              "name": "",
              "type": "int256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMaxWithdrawable",
          "outputs": [
            {
              "internalType": "int256",
              "name": "",
              "type": "int256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "contract ERC20Token",
              "name": "_collateralToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getVault",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract Vault",
              "name": "_vaultContract",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_reliedUpon",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isReliedUpon",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "getCollateralInfo(address,address)": {
            "details": "returns a the relevant info for a collateral"
          },
          "getCollateralRatio(address,address,address)": {
            "details": "returns the collateral ratio of a vault"
          },
          "getHealthFactor(address,address,address)": {
            "details": "returns health factor (if a vault is liquidatable or not) of a vault"
          },
          "getMaxBorrowable(address,address,address)": {
            "details": "returns the max amount of currency a vault owner can mint for that vault without the tx reverting due to the vault's health factor falling below the min health factorif it's a negative number then the vault is below the min health factor already and paying back the additive inverse of the result will pay back both borrowed amount and interest accrued"
          },
          "getMaxWithdrawable(address,address,address)": {
            "details": "returns the max amount of collateral a vault owner can withdraw from a vault without the tx reverting due to the vault's health factor falling below the min health factorif it's a negative number then the vault is below the min health factor already and depositing the additive inverse will put the position at the min health factor saving it from liquidation.the recommended way to do this is to burn/pay back the additive inverse of the result of `getMaxBorrowable()` that way interest would not accrue after payment."
          },
          "getVault(address,address,address)": {
            "details": "returns a vault's relevant info i.e the depositedCollateral, borrowedAmount, and updated accruedFeesrecommended to read the accrued fees from here as it'll be updated before being returned."
          },
          "isReliedUpon(address,address,address)": {
            "details": "returns if _owner has approved _reliedUpon to interact with _owner's vault on their behalf"
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/protocol-core/lib/openzeppelin-contracts/contracts/",
        "descent-collective/oracle-module/=lib/protocol-core/lib/oracle-module/src/",
        "descent-collective/protocol-core/=lib/protocol-core/src/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/protocol-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/protocol-core/lib/openzeppelin-contracts/",
        "oracle-module/=lib/protocol-core/lib/oracle-module/",
        "permit2/=lib/permit2/src/",
        "protocol-core/=lib/protocol-core/",
        "solady/=lib/protocol-core/lib/solady/src/",
        "solmate/=lib/permit2/lib/solmate/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/vaultGetters.sol": "VaultGetters"
      },
      "libraries": {}
    },
    "sources": {
      "lib/protocol-core/lib/solady/src/auth/Ownable.sol": {
        "keccak256": "0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3",
        "urls": [
          "bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3",
          "dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/lib/solady/src/tokens/ERC20.sol": {
        "keccak256": "0xb4a3f9ba8a05107f7370de42cff57f3ad26dafd438712c11531a5892de2f59e0",
        "urls": [
          "bzz-raw://f0a9ca06e3cf6dea1f9a4c5599581573b7d81cd64dc3afb582f325ccf5fdd6dc",
          "dweb:/ipfs/Qmb9r5dDceNF4W8S5u6i85RsNTgE5XG9HbTXkyS25ad3C6"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/lib/solady/src/utils/SafeTransferLib.sol": {
        "keccak256": "0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c",
        "urls": [
          "bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a",
          "dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/src/currency.sol": {
        "keccak256": "0xc266e97010a71e6ac755dce3e51a5a5844663b355e20ab40bf2020fd9308369b",
        "urls": [
          "bzz-raw://d2660220b8a14c6d06351765dd7accec03e350e7fa9ae960c1505bea1e5d8d2d",
          "dweb:/ipfs/QmdYdPSnQC2nym38Fca4vRLKU4A78AQkgYasdg3TaRLGNY"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/helpers/pausable.sol": {
        "keccak256": "0x8acce52dcd450c73da0f77d9539962826da23aca05aa7d0c7568614e89aed997",
        "urls": [
          "bzz-raw://35e2f674e01c0d6107f31d1c32bb2780d442420b7d26636f560a4eb1007f4a8b",
          "dweb:/ipfs/QmWwVLUGiJq6Q3fK6Zhx4pc6kaqC73pkZ1ntfVA3QCHTpd"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/ICurrency.sol": {
        "keccak256": "0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed",
        "urls": [
          "bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998",
          "dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/IRate.sol": {
        "keccak256": "0x166dc423b74b60302197a27fb64557ee8ef6bafe416deb08fe7ecf94f0ede1d1",
        "urls": [
          "bzz-raw://123ef521857e33b10b6f92b743831b26dd5100e57271353bf5c1882fc41c6a2e",
          "dweb:/ipfs/QmdK5y8SntLHAVoNRq6isddmNYunrpv1JxAxyEgRiHdAAj"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/IVault.sol": {
        "keccak256": "0x5684f59679e090ebe583d31fda6d8882469436e71670a4873151793675c7c6c4",
        "urls": [
          "bzz-raw://b265c21b1ff01a8c5cf9b1120feb6b5419a96a0e2a6d1ff4bdd89934c7869c9c",
          "dweb:/ipfs/QmdbCgiYE763cAHZ6nevhf7EzF8BzEkfwsbw4qWuxBkm8f"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/mocks/ERC20Token.sol": {
        "keccak256": "0x62b878fb4dde1f455866e0c1290cc50714805d02c2848a4a9bb33c5dfbc8464d",
        "urls": [
          "bzz-raw://7af3f5638d366abfbca3186813449259a33ed43e7c13ec983d389d73df1ad204",
          "dweb:/ipfs/QmeMdoEVTGqdcgSicTTcmycSQjToT7Sn5ZTgZdVFH9E6HA"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/vault.sol": {
        "keccak256": "0x5dc74b51eb4f221c7a6e78f7557819a8f0087ffa27cac805557bd886b806f584",
        "urls": [
          "bzz-raw://37dc93c378f13a42a21cd3a4718cade7ef3627d5d0d187819010cfefb1387b3a",
          "dweb:/ipfs/QmTn3XKb5q4oQ1AdiVvJ4HMF8Vh9STxv9xyBgFT8jF7riC"
        ],
        "license": "GPL-3.0"
      },
      "src/vaultGetters.sol": {
        "keccak256": "0xefed495a592a80cba0995a919d2f72a92f4ae176208b4775fd57a354657c78b0",
        "urls": [
          "bzz-raw://6f340f53cd7374e82143c022a991a9617d8c4558ebcc678654b38bde6a2874d1",
          "dweb:/ipfs/Qmbr5wF8d9oRiEDj92MreZBgMwf1nZKbkEQgTGRVs7cbX5"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/vaultGetters.sol",
    "id": 50775,
    "exportedSymbols": {
      "ERC20Token": [46273],
      "IVault": [46151],
      "Vault": [48108],
      "VaultGetters": [50774]
    },
    "nodeType": "SourceUnit",
    "src": "32:15479:47",
    "nodes": [
      {
        "id": 49845,
        "nodeType": "PragmaDirective",
        "src": "32:23:47",
        "nodes": [],
        "literals": ["solidity", "0.8", ".21"]
      },
      {
        "id": 49847,
        "nodeType": "ImportDirective",
        "src": "104:78:47",
        "nodes": [],
        "absolutePath": "lib/protocol-core/src/interfaces/IVault.sol",
        "file": "descent-collective/protocol-core/interfaces/IVault.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50775,
        "sourceUnit": 46152,
        "symbolAliases": [
          {
            "foreign": {
              "id": 49846,
              "name": "IVault",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46151,
              "src": "112:6:47",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 49850,
        "nodeType": "ImportDirective",
        "src": "183:77:47",
        "nodes": [],
        "absolutePath": "lib/protocol-core/src/vault.sol",
        "file": "descent-collective/protocol-core/vault.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 50775,
        "sourceUnit": 48109,
        "symbolAliases": [
          {
            "foreign": {
              "id": 49848,
              "name": "Vault",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48108,
              "src": "191:5:47",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 49849,
              "name": "ERC20Token",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46273,
              "src": "198:10:47",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50774,
        "nodeType": "ContractDefinition",
        "src": "262:15248:47",
        "nodes": [
          {
            "id": 49853,
            "nodeType": "VariableDeclaration",
            "src": "290:46:47",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PRECISION_DEGREE",
            "nameLocation": "315:16:47",
            "scope": 50774,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 49851,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "290:7:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3138",
              "id": 49852,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "334:2:47",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_18_by_1",
                "typeString": "int_const 18"
              },
              "value": "18"
            },
            "visibility": "private"
          },
          {
            "id": 49861,
            "nodeType": "VariableDeclaration",
            "src": "342:65:47",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PRECISION",
            "nameLocation": "367:9:47",
            "scope": 50774,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 49854,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "342:7:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 49860,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "31",
                "id": 49855,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "379:1:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "components": [
                  {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 49858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3130",
                      "id": 49856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "384:2:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "id": 49857,
                      "name": "PRECISION_DEGREE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49853,
                      "src": "390:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "384:22:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 49859,
                "isConstant": false,
                "isInlineArray": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "TupleExpression",
                "src": "383:24:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "src": "379:28:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "id": 49869,
            "nodeType": "VariableDeclaration",
            "src": "413:76:47",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "HUNDRED_PERCENTAGE",
            "nameLocation": "438:18:47",
            "scope": 50774,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 49862,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "413:7:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 49868,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "313030",
                "id": 49863,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "459:3:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_100_by_1",
                  "typeString": "int_const 100"
                },
                "value": "100"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "components": [
                  {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 49866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3130",
                      "id": 49864,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "466:2:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "id": 49865,
                      "name": "PRECISION_DEGREE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49853,
                      "src": "472:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "466:22:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 49867,
                "isConstant": false,
                "isInlineArray": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "TupleExpression",
                "src": "465:24:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "src": "459:30:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "id": 49872,
            "nodeType": "VariableDeclaration",
            "src": "495:57:47",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "ADDITIONAL_FEED_PRECISION",
            "nameLocation": "520:25:47",
            "scope": 50774,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 49870,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "495:7:47",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31653132",
              "id": 49871,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "548:4:47",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000_by_1",
                "typeString": "int_const 1000000000000"
              },
              "value": "1e12"
            },
            "visibility": "private"
          },
          {
            "id": 49909,
            "nodeType": "FunctionDefinition",
            "src": "559:471:47",
            "nodes": [],
            "body": {
              "id": 49908,
              "nodeType": "Block",
              "src": "727:303:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [49887, 49889, 49891, 49893],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49887,
                      "mutability": "mutable",
                      "name": "depositedCollateral",
                      "nameLocation": "746:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49908,
                      "src": "738:27:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49886,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "738:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49889,
                      "mutability": "mutable",
                      "name": "borrowedAmount",
                      "nameLocation": "775:14:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49908,
                      "src": "767:22:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49888,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "767:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49891,
                      "mutability": "mutable",
                      "name": "accruedFees",
                      "nameLocation": "799:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49908,
                      "src": "791:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49890,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "791:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49893,
                      "mutability": "mutable",
                      "name": "lastTotalAccumulatedRate",
                      "nameLocation": "820:24:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49908,
                      "src": "812:32:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49892,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "812:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49899,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 49896,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49878,
                        "src": "888:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 49897,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49880,
                        "src": "906:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 49894,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49875,
                        "src": "860:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 49895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "875:12:47",
                      "memberName": "vaultMapping",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46565,
                      "src": "860:27:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ERC20Token,address) view external returns (uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 49898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "860:53:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "737:176:47"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49902,
                        "name": "depositedCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49887,
                        "src": "948:19:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49903,
                        "name": "borrowedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49889,
                        "src": "969:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49904,
                        "name": "accruedFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49891,
                        "src": "985:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49905,
                        "name": "lastTotalAccumulatedRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49893,
                        "src": "998:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49900,
                        "name": "IVault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46151,
                        "src": "931:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IVault_$46151_$",
                          "typeString": "type(contract IVault)"
                        }
                      },
                      "id": 49901,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "938:9:47",
                      "memberName": "VaultInfo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46144,
                      "src": "931:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_VaultInfo_$46144_storage_ptr_$",
                        "typeString": "type(struct IVault.VaultInfo storage pointer)"
                      }
                    },
                    "id": 49906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "931:92:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "functionReturnParameters": 49885,
                  "id": 49907,
                  "nodeType": "Return",
                  "src": "924:99:47"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getVaultMapping",
            "nameLocation": "568:16:47",
            "parameters": {
              "id": 49881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49875,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "591:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49909,
                  "src": "585:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 49874,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49873,
                      "name": "Vault",
                      "nameLocations": ["585:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "585:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "585:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49878,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "618:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49909,
                  "src": "607:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 49877,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49876,
                      "name": "ERC20Token",
                      "nameLocations": ["607:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "607:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "607:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49880,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "644:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49909,
                  "src": "636:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "584:67:47"
            },
            "returnParameters": {
              "id": 49885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49884,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 49909,
                  "src": "698:23:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                    "typeString": "struct IVault.VaultInfo"
                  },
                  "typeName": {
                    "id": 49883,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49882,
                      "name": "IVault.VaultInfo",
                      "nameLocations": ["698:6:47", "705:9:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46144,
                      "src": "698:16:47"
                    },
                    "referencedDeclaration": 46144,
                    "src": "698:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                      "typeString": "struct IVault.VaultInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "697:25:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 49936,
            "nodeType": "FunctionDefinition",
            "src": "1036:278:47",
            "nodes": [],
            "body": {
              "id": 49935,
              "nodeType": "Block",
              "src": "1130:184:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [49919, 49921, 49923],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49919,
                      "mutability": "mutable",
                      "name": "rate",
                      "nameLocation": "1149:4:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49935,
                      "src": "1141:12:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49918,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1141:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49921,
                      "mutability": "mutable",
                      "name": "accumulatedRate",
                      "nameLocation": "1163:15:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49935,
                      "src": "1155:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49920,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1155:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49923,
                      "mutability": "mutable",
                      "name": "lastUpdateTime",
                      "nameLocation": "1188:14:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49935,
                      "src": "1180:22:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49922,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1180:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49927,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 49924,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49912,
                        "src": "1206:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 49925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1221:12:47",
                      "memberName": "baseRateInfo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46545,
                      "src": "1206:27:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function () view external returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 49926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1206:29:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1140:95:47"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49930,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49919,
                        "src": "1269:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49931,
                        "name": "accumulatedRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49921,
                        "src": "1275:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49932,
                        "name": "lastUpdateTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49923,
                        "src": "1292:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49928,
                        "name": "IVault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46151,
                        "src": "1253:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IVault_$46151_$",
                          "typeString": "type(contract IVault)"
                        }
                      },
                      "id": 49929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1260:8:47",
                      "memberName": "RateInfo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46115,
                      "src": "1253:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_RateInfo_$46115_storage_ptr_$",
                        "typeString": "type(struct IVault.RateInfo storage pointer)"
                      }
                    },
                    "id": 49933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1253:54:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                      "typeString": "struct IVault.RateInfo memory"
                    }
                  },
                  "functionReturnParameters": 49917,
                  "id": 49934,
                  "nodeType": "Return",
                  "src": "1246:61:47"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getBaseRateInfo",
            "nameLocation": "1045:16:47",
            "parameters": {
              "id": 49913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49912,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "1068:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49936,
                  "src": "1062:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 49911,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49910,
                      "name": "Vault",
                      "nameLocations": ["1062:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "1062:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "1062:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1061:22:47"
            },
            "returnParameters": {
              "id": 49917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49916,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 49936,
                  "src": "1106:22:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                    "typeString": "struct IVault.RateInfo"
                  },
                  "typeName": {
                    "id": 49915,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49914,
                      "name": "IVault.RateInfo",
                      "nameLocations": ["1106:6:47", "1113:8:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46115,
                      "src": "1106:15:47"
                    },
                    "referencedDeclaration": 46115,
                    "src": "1106:15:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RateInfo_$46115_storage_ptr",
                      "typeString": "struct IVault.RateInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1105:24:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 49986,
            "nodeType": "FunctionDefinition",
            "src": "1320:945:47",
            "nodes": [],
            "body": {
              "id": 49985,
              "nodeType": "Block",
              "src": "1482:783:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [49949, 49951, 49953, 49955, 49958, 49960, 49962, 49964, 49966],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 49949,
                      "mutability": "mutable",
                      "name": "totalDepositedCollateral",
                      "nameLocation": "1514:24:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1506:32:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49948,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1506:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49951,
                      "mutability": "mutable",
                      "name": "totalBorrowedAmount",
                      "nameLocation": "1560:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1552:27:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49950,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1552:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49953,
                      "mutability": "mutable",
                      "name": "liquidationThreshold",
                      "nameLocation": "1601:20:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1593:28:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49952,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1593:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49955,
                      "mutability": "mutable",
                      "name": "liquidationBonus",
                      "nameLocation": "1643:16:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1635:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49954,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1635:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49958,
                      "mutability": "mutable",
                      "name": "rateInfo",
                      "nameLocation": "1695:8:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1673:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                        "typeString": "struct IVault.RateInfo"
                      },
                      "typeName": {
                        "id": 49957,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 49956,
                          "name": "Vault.RateInfo",
                          "nameLocations": ["1673:5:47", "1679:8:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46115,
                          "src": "1673:14:47"
                        },
                        "referencedDeclaration": 46115,
                        "src": "1673:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_storage_ptr",
                          "typeString": "struct IVault.RateInfo"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49960,
                      "mutability": "mutable",
                      "name": "price",
                      "nameLocation": "1725:5:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1717:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49959,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1717:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49962,
                      "mutability": "mutable",
                      "name": "debtCeiling",
                      "nameLocation": "1752:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1744:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49961,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1744:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49964,
                      "mutability": "mutable",
                      "name": "collateralFloorPerPosition",
                      "nameLocation": "1785:26:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1777:34:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49963,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1777:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 49966,
                      "mutability": "mutable",
                      "name": "additionalCollateralPercision",
                      "nameLocation": "1833:29:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 49985,
                      "src": "1825:37:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 49965,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1825:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 49971,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 49969,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49942,
                        "src": "1908:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "expression": {
                        "id": 49967,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49939,
                        "src": "1875:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 49968,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1890:17:47",
                      "memberName": "collateralMapping",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46557,
                      "src": "1875:32:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20Token_$46273_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_RateInfo_$46115_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract ERC20Token) view external returns (uint256,uint256,uint256,uint256,struct IVault.RateInfo memory,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 49970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1875:50:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_RateInfo_$46115_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256,struct IVault.RateInfo memory,uint256,uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1492:433:47"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 49974,
                        "name": "totalDepositedCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49949,
                        "src": "1978:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49975,
                        "name": "totalBorrowedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49951,
                        "src": "2016:19:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49976,
                        "name": "liquidationThreshold",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49953,
                        "src": "2049:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49977,
                        "name": "liquidationBonus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49955,
                        "src": "2083:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49978,
                        "name": "rateInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49958,
                        "src": "2113:8:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      {
                        "id": 49979,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49960,
                        "src": "2135:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49980,
                        "name": "debtCeiling",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49962,
                        "src": "2154:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49981,
                        "name": "collateralFloorPerPosition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49964,
                        "src": "2179:26:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 49982,
                        "name": "additionalCollateralPercision",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49966,
                        "src": "2219:29:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 49972,
                        "name": "IVault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46151,
                        "src": "1943:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IVault_$46151_$",
                          "typeString": "type(contract IVault)"
                        }
                      },
                      "id": 49973,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1950:14:47",
                      "memberName": "CollateralInfo",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46135,
                      "src": "1943:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_CollateralInfo_$46135_storage_ptr_$",
                        "typeString": "type(struct IVault.CollateralInfo storage pointer)"
                      }
                    },
                    "id": 49983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1943:315:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "functionReturnParameters": 49947,
                  "id": 49984,
                  "nodeType": "Return",
                  "src": "1936:322:47"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCollateralMapping",
            "nameLocation": "1329:21:47",
            "parameters": {
              "id": 49943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49939,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "1357:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49986,
                  "src": "1351:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 49938,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49937,
                      "name": "Vault",
                      "nameLocations": ["1351:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "1351:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "1351:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49942,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "1384:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 49986,
                  "src": "1373:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 49941,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49940,
                      "name": "ERC20Token",
                      "nameLocations": ["1373:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "1373:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "1373:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1350:51:47"
            },
            "returnParameters": {
              "id": 49947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49946,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 49986,
                  "src": "1448:28:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 49945,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49944,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["1448:6:47", "1455:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "1448:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "1448:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1447:30:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 50043,
            "nodeType": "FunctionDefinition",
            "src": "2482:587:47",
            "nodes": [],
            "body": {
              "id": 50042,
              "nodeType": "Block",
              "src": "2631:438:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50004],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50004,
                      "mutability": "mutable",
                      "name": "_vault",
                      "nameLocation": "2665:6:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50042,
                      "src": "2641:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                        "typeString": "struct IVault.VaultInfo"
                      },
                      "typeName": {
                        "id": 50003,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50002,
                          "name": "IVault.VaultInfo",
                          "nameLocations": ["2641:6:47", "2648:9:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46144,
                          "src": "2641:16:47"
                        },
                        "referencedDeclaration": 46144,
                        "src": "2641:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                          "typeString": "struct IVault.VaultInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50010,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50006,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49990,
                        "src": "2691:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50007,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49993,
                        "src": "2707:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 50008,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49995,
                        "src": "2725:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50005,
                      "name": "_getVaultMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49909,
                      "src": "2674:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_struct$_VaultInfo_$46144_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token,address) view returns (struct IVault.VaultInfo memory)"
                      }
                    },
                    "id": 50009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2674:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2641:91:47"
                },
                {
                  "assignments": [50015],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50015,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "2771:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50042,
                      "src": "2742:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50014,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50013,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["2742:6:47", "2749:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "2742:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "2742:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50020,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50017,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49990,
                        "src": "2807:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50018,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49993,
                        "src": "2823:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50016,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "2785:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2785:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2742:98:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 50021,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50015,
                          "src": "2855:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50022,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2867:8:47",
                        "memberName": "rateInfo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46126,
                        "src": "2855:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      "id": 50023,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2876:4:47",
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46110,
                      "src": "2855:25:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50024,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2884:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2855:30:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50028,
                  "nodeType": "IfStatement",
                  "src": "2851:47:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "74727565",
                      "id": 50026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2894:4:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "functionReturnParameters": 49999,
                    "id": 50027,
                    "nodeType": "Return",
                    "src": "2887:11:47"
                  }
                },
                {
                  "assignments": [50030],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50030,
                      "mutability": "mutable",
                      "name": "_collateralRatio",
                      "nameLocation": "2917:16:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50042,
                      "src": "2909:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2909:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50036,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50032,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 49990,
                        "src": "2956:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50033,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50015,
                        "src": "2972:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50034,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50004,
                        "src": "2985:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50031,
                      "name": "_getCollateralRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50546,
                      "src": "2936:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256)"
                      }
                    },
                    "id": 50035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2936:56:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2909:83:47"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50037,
                      "name": "_collateralRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50030,
                      "src": "3010:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "expression": {
                        "id": 50038,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50015,
                        "src": "3030:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      "id": 50039,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3042:20:47",
                      "memberName": "liquidationThreshold",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46121,
                      "src": "3030:32:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3010:52:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 49999,
                  "id": 50041,
                  "nodeType": "Return",
                  "src": "3003:59:47"
                }
              ]
            },
            "documentation": {
              "id": 49987,
              "nodeType": "StructuredDocumentation",
              "src": "2385:92:47",
              "text": " @dev returns health factor (if a vault is liquidatable or not) of a vault"
            },
            "functionSelector": "54510b9d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHealthFactor",
            "nameLocation": "2491:15:47",
            "parameters": {
              "id": 49996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49990,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "2513:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50043,
                  "src": "2507:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 49989,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49988,
                      "name": "Vault",
                      "nameLocations": ["2507:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "2507:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "2507:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49993,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "2540:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50043,
                  "src": "2529:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 49992,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 49991,
                      "name": "ERC20Token",
                      "nameLocations": ["2529:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "2529:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "2529:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49995,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "2566:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50043,
                  "src": "2558:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49994,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2558:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2506:67:47"
            },
            "returnParameters": {
              "id": 49999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49998,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50043,
                  "src": "2621:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 49997,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2621:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2620:6:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50093,
            "nodeType": "FunctionDefinition",
            "src": "3143:500:47",
            "nodes": [],
            "body": {
              "id": 50092,
              "nodeType": "Block",
              "src": "3298:345:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50061],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50061,
                      "mutability": "mutable",
                      "name": "_vault",
                      "nameLocation": "3332:6:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50092,
                      "src": "3308:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                        "typeString": "struct IVault.VaultInfo"
                      },
                      "typeName": {
                        "id": 50060,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50059,
                          "name": "IVault.VaultInfo",
                          "nameLocations": ["3308:6:47", "3315:9:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46144,
                          "src": "3308:16:47"
                        },
                        "referencedDeclaration": 46144,
                        "src": "3308:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                          "typeString": "struct IVault.VaultInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50067,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50063,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50047,
                        "src": "3358:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50064,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50050,
                        "src": "3374:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 50065,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50052,
                        "src": "3392:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50062,
                      "name": "_getVaultMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49909,
                      "src": "3341:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_struct$_VaultInfo_$46144_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token,address) view returns (struct IVault.VaultInfo memory)"
                      }
                    },
                    "id": 50066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3341:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3308:91:47"
                },
                {
                  "assignments": [50072],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50072,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "3438:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50092,
                      "src": "3409:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50071,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50070,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["3409:6:47", "3416:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "3409:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "3409:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50077,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50074,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50047,
                        "src": "3474:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50075,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50050,
                        "src": "3490:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50073,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "3452:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3452:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3409:98:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 50078,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50072,
                          "src": "3522:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50079,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3534:8:47",
                        "memberName": "rateInfo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46126,
                        "src": "3522:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      "id": 50080,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3543:4:47",
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46110,
                      "src": "3522:25:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3551:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3522:30:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50085,
                  "nodeType": "IfStatement",
                  "src": "3518:44:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 50083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3561:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 50056,
                    "id": 50084,
                    "nodeType": "Return",
                    "src": "3554:8:47"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50087,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50047,
                        "src": "3600:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50088,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50072,
                        "src": "3616:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50089,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50061,
                        "src": "3629:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50086,
                      "name": "_getCollateralRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50546,
                      "src": "3580:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256)"
                      }
                    },
                    "id": 50090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3580:56:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50056,
                  "id": 50091,
                  "nodeType": "Return",
                  "src": "3573:63:47"
                }
              ]
            },
            "documentation": {
              "id": 50044,
              "nodeType": "StructuredDocumentation",
              "src": "3075:63:47",
              "text": " @dev returns the collateral ratio of a vault"
            },
            "functionSelector": "f44364c5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCollateralRatio",
            "nameLocation": "3152:18:47",
            "parameters": {
              "id": 50053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50047,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "3177:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50093,
                  "src": "3171:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50046,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50045,
                      "name": "Vault",
                      "nameLocations": ["3171:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "3171:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "3171:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50050,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "3204:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50093,
                  "src": "3193:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 50049,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50048,
                      "name": "ERC20Token",
                      "nameLocations": ["3193:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "3193:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "3193:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50052,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3230:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50093,
                  "src": "3222:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3222:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3170:67:47"
            },
            "returnParameters": {
              "id": 50056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50055,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50093,
                  "src": "3285:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50054,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3285:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3284:9:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50232,
            "nodeType": "FunctionDefinition",
            "src": "4043:2066:47",
            "nodes": [],
            "body": {
              "id": 50231,
              "nodeType": "Block",
              "src": "4195:1914:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50111],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50111,
                      "mutability": "mutable",
                      "name": "_vault",
                      "nameLocation": "4229:6:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "4205:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                        "typeString": "struct IVault.VaultInfo"
                      },
                      "typeName": {
                        "id": 50110,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50109,
                          "name": "IVault.VaultInfo",
                          "nameLocations": ["4205:6:47", "4212:9:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46144,
                          "src": "4205:16:47"
                        },
                        "referencedDeclaration": 46144,
                        "src": "4205:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                          "typeString": "struct IVault.VaultInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50117,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50113,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50097,
                        "src": "4255:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50114,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50100,
                        "src": "4271:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 50115,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50102,
                        "src": "4289:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50112,
                      "name": "_getVaultMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49909,
                      "src": "4238:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_struct$_VaultInfo_$46144_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token,address) view returns (struct IVault.VaultInfo memory)"
                      }
                    },
                    "id": 50116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4238:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4205:91:47"
                },
                {
                  "assignments": [50122],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50122,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "4335:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "4306:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50121,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50120,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["4306:6:47", "4313:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "4306:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "4306:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50127,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50124,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50097,
                        "src": "4371:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50125,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50100,
                        "src": "4387:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50123,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "4349:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4349:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4306:98:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 50137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 50128,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50111,
                          "src": "4466:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50129,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4473:19:47",
                        "memberName": "depositedCollateral",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46137,
                        "src": "4466:26:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 50130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4496:1:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4466:31:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50136,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 50132,
                            "name": "_collateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50122,
                            "src": "4501:11:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                              "typeString": "struct IVault.CollateralInfo memory"
                            }
                          },
                          "id": 50133,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4513:8:47",
                          "memberName": "rateInfo",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46126,
                          "src": "4501:20:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                            "typeString": "struct IVault.RateInfo memory"
                          }
                        },
                        "id": 50134,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4522:4:47",
                        "memberName": "rate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46110,
                        "src": "4501:25:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 50135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4530:1:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4501:30:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4466:65:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50140,
                  "nodeType": "IfStatement",
                  "src": "4462:79:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 50138,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4540:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 50106,
                    "id": 50139,
                    "nodeType": "Return",
                    "src": "4533:8:47"
                  }
                },
                {
                  "assignments": [50142],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50142,
                      "mutability": "mutable",
                      "name": "_collateralValueInCurrency",
                      "nameLocation": "4595:26:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "4587:34:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50141,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4587:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50147,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50144,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50122,
                        "src": "4654:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50145,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50111,
                        "src": "4667:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50143,
                      "name": "_getCurrencyValueOfCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50577,
                      "src": "4624:29:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) pure returns (uint256)"
                      }
                    },
                    "id": 50146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4624:50:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4587:87:47"
                },
                {
                  "assignments": [50149],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50149,
                      "mutability": "mutable",
                      "name": "_adjustedCollateralValueInCurrency",
                      "nameLocation": "4746:34:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "4738:42:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50148,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4738:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50157,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 50150,
                            "name": "_collateralValueInCurrency",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50142,
                            "src": "4796:26:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 50151,
                              "name": "_collateral",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50122,
                              "src": "4825:11:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                "typeString": "struct IVault.CollateralInfo memory"
                              }
                            },
                            "id": 50152,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4837:20:47",
                            "memberName": "liquidationThreshold",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46121,
                            "src": "4825:32:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4796:61:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50154,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "4795:63:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 50155,
                      "name": "HUNDRED_PERCENTAGE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49869,
                      "src": "4861:18:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4795:84:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4738:141:47"
                },
                {
                  "assignments": [50159, null],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50159,
                      "mutability": "mutable",
                      "name": "_currentAccruedFees",
                      "nameLocation": "4935:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "4927:27:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50158,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4927:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 50165,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50161,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50097,
                        "src": "4981:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50162,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50122,
                        "src": "4997:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50163,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50111,
                        "src": "5010:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50160,
                      "name": "_calculateAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50656,
                      "src": "4959:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256,uint256)"
                      }
                    },
                    "id": 50164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4959:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4926:91:47"
                },
                {
                  "assignments": [50167],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50167,
                      "mutability": "mutable",
                      "name": "_borrowedAmount",
                      "nameLocation": "5035:15:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "5027:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50166,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5027:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50175,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50172,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 50168,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50111,
                          "src": "5053:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50169,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5060:14:47",
                        "memberName": "borrowedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46139,
                        "src": "5053:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 50170,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50111,
                          "src": "5077:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50171,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5084:11:47",
                        "memberName": "accruedFees",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46141,
                        "src": "5077:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5053:42:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 50173,
                      "name": "_currentAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50159,
                      "src": "5098:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5053:64:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5027:90:47"
                },
                {
                  "assignments": [50177],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50177,
                      "mutability": "mutable",
                      "name": "maxBorrowableAmount",
                      "nameLocation": "5135:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50231,
                      "src": "5128:26:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 50176,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5128:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50187,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 50186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 50180,
                          "name": "_adjustedCollateralValueInCurrency",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50149,
                          "src": "5164:34:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 50179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5157:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 50178,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5157:6:47",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 50181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5157:42:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 50184,
                          "name": "_borrowedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50167,
                          "src": "5209:15:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 50183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5202:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 50182,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5202:6:47",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 50185,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5202:23:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "5157:68:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5128:97:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 50198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 50190,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 50188,
                        "name": "maxBorrowableAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50177,
                        "src": "5445:19:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 50189,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5467:1:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5445:23:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 50191,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50122,
                          "src": "5472:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50192,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5484:11:47",
                        "memberName": "debtCeiling",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46130,
                        "src": "5472:23:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 50195,
                            "name": "maxBorrowableAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50177,
                            "src": "5506:19:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          ],
                          "id": 50194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5498:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 50193,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "5498:7:47",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 50196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5498:28:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5472:54:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5445:81:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50228,
                  "nodeType": "IfStatement",
                  "src": "5441:392:47",
                  "trueBody": {
                    "id": 50227,
                    "nodeType": "Block",
                    "src": "5528:305:47",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 50199,
                              "name": "_collateral",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50122,
                              "src": "5546:11:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                "typeString": "struct IVault.CollateralInfo memory"
                              }
                            },
                            "id": 50200,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5558:11:47",
                            "memberName": "debtCeiling",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46130,
                            "src": "5546:23:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 50205,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5585:6:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 50204,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5585:6:47",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      }
                                    ],
                                    "id": 50203,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "5580:4:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 50206,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5580:12:47",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_int256",
                                    "typeString": "type(int256)"
                                  }
                                },
                                "id": 50207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "5593:3:47",
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "5580:16:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 50202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5572:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 50201,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5572:7:47",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 50208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5572:25:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5546:51:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 50224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 50218,
                              "name": "maxBorrowableAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50177,
                              "src": "5769:19:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 50221,
                                    "name": "_collateral",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50122,
                                    "src": "5798:11:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                      "typeString": "struct IVault.CollateralInfo memory"
                                    }
                                  },
                                  "id": 50222,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "5810:11:47",
                                  "memberName": "debtCeiling",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 46130,
                                  "src": "5798:23:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 50220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5791:6:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 50219,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5791:6:47",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 50223,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5791:31:47",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "5769:53:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "id": 50225,
                          "nodeType": "ExpressionStatement",
                          "src": "5769:53:47"
                        },
                        "id": 50226,
                        "nodeType": "IfStatement",
                        "src": "5542:280:47",
                        "trueBody": {
                          "expression": {
                            "id": 50216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 50210,
                              "name": "maxBorrowableAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50177,
                              "src": "5599:19:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 50213,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5626:6:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 50212,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5626:6:47",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    }
                                  ],
                                  "id": 50211,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "5621:4:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 50214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5621:12:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_int256",
                                  "typeString": "type(int256)"
                                }
                              },
                              "id": 50215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "5634:3:47",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "5621:16:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "5599:38:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "id": 50217,
                          "nodeType": "ExpressionStatement",
                          "src": "5599:38:47"
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 50229,
                    "name": "maxBorrowableAmount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 50177,
                    "src": "6083:19:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 50106,
                  "id": 50230,
                  "nodeType": "Return",
                  "src": "6076:26:47"
                }
              ]
            },
            "documentation": {
              "id": 50094,
              "nodeType": "StructuredDocumentation",
              "src": "3649:389:47",
              "text": " @dev returns the max amount of currency a vault owner can mint for that vault without the tx reverting due to the vault's health factor falling below the min health factor\n @dev if it's a negative number then the vault is below the min health factor already and paying back the additive inverse of the result will pay back both borrowed amount and interest accrued"
            },
            "functionSelector": "c03d8871",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaxBorrowable",
            "nameLocation": "4052:16:47",
            "parameters": {
              "id": 50103,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50097,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "4075:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50232,
                  "src": "4069:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50096,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50095,
                      "name": "Vault",
                      "nameLocations": ["4069:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "4069:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "4069:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50100,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "4102:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50232,
                  "src": "4091:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 50099,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50098,
                      "name": "ERC20Token",
                      "nameLocations": ["4091:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "4091:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "4091:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50102,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "4128:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50232,
                  "src": "4120:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50101,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4120:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4068:67:47"
            },
            "returnParameters": {
              "id": 50106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50105,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50232,
                  "src": "4183:6:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 50104,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4183:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4182:8:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50323,
            "nodeType": "FunctionDefinition",
            "src": "6689:1225:47",
            "nodes": [],
            "body": {
              "id": 50322,
              "nodeType": "Block",
              "src": "6843:1071:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50250],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50250,
                      "mutability": "mutable",
                      "name": "_vault",
                      "nameLocation": "6877:6:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "6853:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                        "typeString": "struct IVault.VaultInfo"
                      },
                      "typeName": {
                        "id": 50249,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50248,
                          "name": "IVault.VaultInfo",
                          "nameLocations": ["6853:6:47", "6860:9:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46144,
                          "src": "6853:16:47"
                        },
                        "referencedDeclaration": 46144,
                        "src": "6853:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                          "typeString": "struct IVault.VaultInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50256,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50252,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50236,
                        "src": "6903:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50253,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50239,
                        "src": "6919:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 50254,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50241,
                        "src": "6937:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50251,
                      "name": "_getVaultMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49909,
                      "src": "6886:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_struct$_VaultInfo_$46144_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token,address) view returns (struct IVault.VaultInfo memory)"
                      }
                    },
                    "id": 50255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6886:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6853:91:47"
                },
                {
                  "assignments": [50261],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50261,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "6983:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "6954:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50260,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50259,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["6954:6:47", "6961:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "6954:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "6954:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50266,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50263,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50236,
                        "src": "7019:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50264,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50239,
                        "src": "7035:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50262,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "6997:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6997:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6954:98:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 50267,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50261,
                          "src": "7067:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50268,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7079:8:47",
                        "memberName": "rateInfo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46126,
                        "src": "7067:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      "id": 50269,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7088:4:47",
                      "memberName": "rate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46110,
                      "src": "7067:25:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50270,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7096:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7067:30:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50274,
                  "nodeType": "IfStatement",
                  "src": "7063:44:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 50272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7106:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 50245,
                    "id": 50273,
                    "nodeType": "Return",
                    "src": "7099:8:47"
                  }
                },
                {
                  "assignments": [50276, null],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50276,
                      "mutability": "mutable",
                      "name": "_currentAccruedFees",
                      "nameLocation": "7163:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "7155:27:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50275,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7155:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 50282,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50278,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50236,
                        "src": "7209:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50279,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50261,
                        "src": "7225:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50280,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50250,
                        "src": "7238:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50277,
                      "name": "_calculateAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50656,
                      "src": "7187:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256,uint256)"
                      }
                    },
                    "id": 50281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7187:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7154:91:47"
                },
                {
                  "assignments": [50284],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50284,
                      "mutability": "mutable",
                      "name": "_borrowedAmount",
                      "nameLocation": "7263:15:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "7255:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50283,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7255:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50292,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 50285,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50250,
                          "src": "7281:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50286,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7288:14:47",
                        "memberName": "borrowedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46139,
                        "src": "7281:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 50287,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50250,
                          "src": "7305:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50288,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7312:11:47",
                        "memberName": "accruedFees",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46141,
                        "src": "7305:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7281:42:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 50290,
                      "name": "_currentAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50276,
                      "src": "7326:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7281:64:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7255:90:47"
                },
                {
                  "assignments": [50294],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50294,
                      "mutability": "mutable",
                      "name": "_collateralAmountFromCurrencyValue",
                      "nameLocation": "7420:34:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "7412:42:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50293,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7412:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50299,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50296,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50261,
                        "src": "7495:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50297,
                        "name": "_borrowedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50284,
                        "src": "7508:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50295,
                      "name": "_getCollateralAmountFromCurrencyValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50607,
                      "src": "7457:37:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct IVault.CollateralInfo memory,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 50298,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7457:67:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7412:112:47"
                },
                {
                  "assignments": [50301],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50301,
                      "mutability": "mutable",
                      "name": "_adjustedCollateralAmountFromCurrencyValue",
                      "nameLocation": "7583:42:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50322,
                      "src": "7575:50:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50300,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7575:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50310,
                  "initialValue": {
                    "arguments": [
                      {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 50303,
                              "name": "_collateralAmountFromCurrencyValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50294,
                              "src": "7648:34:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 50304,
                              "name": "HUNDRED_PERCENTAGE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49869,
                              "src": "7685:18:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "7648:55:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 50306,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "7647:57:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50307,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50261,
                          "src": "7706:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50308,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7718:20:47",
                        "memberName": "liquidationThreshold",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46121,
                        "src": "7706:32:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50302,
                      "name": "_divUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50773,
                      "src": "7640:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 50309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7640:99:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7575:164:47"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 50320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 50313,
                            "name": "_vault",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50250,
                            "src": "7827:6:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                              "typeString": "struct IVault.VaultInfo memory"
                            }
                          },
                          "id": 50314,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7834:19:47",
                          "memberName": "depositedCollateral",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46137,
                          "src": "7827:26:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 50312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7820:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 50311,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7820:6:47",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 50315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7820:34:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 50318,
                          "name": "_adjustedCollateralAmountFromCurrencyValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50301,
                          "src": "7864:42:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 50317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7857:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 50316,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7857:6:47",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 50319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7857:50:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "7820:87:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 50245,
                  "id": 50321,
                  "nodeType": "Return",
                  "src": "7813:94:47"
                }
              ]
            },
            "documentation": {
              "id": 50233,
              "nodeType": "StructuredDocumentation",
              "src": "6115:569:47",
              "text": " @dev returns the max amount of collateral a vault owner can withdraw from a vault without the tx reverting due to the vault's health factor falling below the min health factor\n @dev if it's a negative number then the vault is below the min health factor already and depositing the additive inverse will put the position at the min health factor saving it from liquidation.\n @dev the recommended way to do this is to burn/pay back the additive inverse of the result of `getMaxBorrowable()` that way interest would not accrue after payment."
            },
            "functionSelector": "a6e91adf",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaxWithdrawable",
            "nameLocation": "6698:18:47",
            "parameters": {
              "id": 50242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50236,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "6723:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50323,
                  "src": "6717:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50235,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50234,
                      "name": "Vault",
                      "nameLocations": ["6717:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "6717:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "6717:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50239,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "6750:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50323,
                  "src": "6739:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 50238,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50237,
                      "name": "ERC20Token",
                      "nameLocations": ["6739:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "6739:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "6739:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50241,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "6776:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50323,
                  "src": "6768:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6768:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6716:67:47"
            },
            "returnParameters": {
              "id": 50245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50244,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50323,
                  "src": "6831:6:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 50243,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6831:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6830:8:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50385,
            "nodeType": "FunctionDefinition",
            "src": "8151:672:47",
            "nodes": [],
            "body": {
              "id": 50384,
              "nodeType": "Block",
              "src": "8314:509:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50345],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50345,
                      "mutability": "mutable",
                      "name": "_vault",
                      "nameLocation": "8348:6:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50384,
                      "src": "8324:30:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                        "typeString": "struct IVault.VaultInfo"
                      },
                      "typeName": {
                        "id": 50344,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50343,
                          "name": "IVault.VaultInfo",
                          "nameLocations": ["8324:6:47", "8331:9:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46144,
                          "src": "8324:16:47"
                        },
                        "referencedDeclaration": 46144,
                        "src": "8324:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                          "typeString": "struct IVault.VaultInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50351,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50347,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50327,
                        "src": "8374:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50348,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50330,
                        "src": "8390:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      },
                      {
                        "id": 50349,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50332,
                        "src": "8408:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50346,
                      "name": "_getVaultMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49909,
                      "src": "8357:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$_t_address_$returns$_t_struct$_VaultInfo_$46144_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token,address) view returns (struct IVault.VaultInfo memory)"
                      }
                    },
                    "id": 50350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8357:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                      "typeString": "struct IVault.VaultInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8324:91:47"
                },
                {
                  "assignments": [50356],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50356,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "8454:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50384,
                      "src": "8425:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50355,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50354,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["8425:6:47", "8432:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "8425:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "8425:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50361,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50358,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50327,
                        "src": "8490:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50359,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50330,
                        "src": "8506:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50357,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "8468:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8468:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8425:98:47"
                },
                {
                  "assignments": [50363, null],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50363,
                      "mutability": "mutable",
                      "name": "_currentAccruedFees",
                      "nameLocation": "8578:19:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50384,
                      "src": "8570:27:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50362,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8570:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 50369,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50365,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50327,
                        "src": "8624:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50366,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50356,
                        "src": "8640:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50367,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50345,
                        "src": "8653:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50364,
                      "name": "_calculateAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50656,
                      "src": "8602:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256,uint256)"
                      }
                    },
                    "id": 50368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8602:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8569:91:47"
                },
                {
                  "assignments": [50371],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50371,
                      "mutability": "mutable",
                      "name": "_accruedFees",
                      "nameLocation": "8678:12:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50384,
                      "src": "8670:20:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50370,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8670:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50376,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 50372,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50345,
                        "src": "8693:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      },
                      "id": 50373,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8700:11:47",
                      "memberName": "accruedFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46141,
                      "src": "8693:18:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 50374,
                      "name": "_currentAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50363,
                      "src": "8714:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8693:40:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8670:63:47"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 50377,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50345,
                          "src": "8752:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50378,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8759:19:47",
                        "memberName": "depositedCollateral",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46137,
                        "src": "8752:26:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50379,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50345,
                          "src": "8780:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50380,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8787:14:47",
                        "memberName": "borrowedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46139,
                        "src": "8780:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50381,
                        "name": "_accruedFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50371,
                        "src": "8803:12:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 50382,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8751:65:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 50340,
                  "id": 50383,
                  "nodeType": "Return",
                  "src": "8744:72:47"
                }
              ]
            },
            "documentation": {
              "id": 50324,
              "nodeType": "StructuredDocumentation",
              "src": "7920:226:47",
              "text": " @dev returns a vault's relevant info i.e the depositedCollateral, borrowedAmount, and updated accruedFees\n @dev recommended to read the accrued fees from here as it'll be updated before being returned."
            },
            "functionSelector": "347c5d43",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVault",
            "nameLocation": "8160:8:47",
            "parameters": {
              "id": 50333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50327,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "8175:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8169:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50326,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50325,
                      "name": "Vault",
                      "nameLocations": ["8169:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "8169:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "8169:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50330,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "8202:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8191:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 50329,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50328,
                      "name": "ERC20Token",
                      "nameLocations": ["8191:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "8191:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "8191:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50332,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "8228:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8220:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8220:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8168:67:47"
            },
            "returnParameters": {
              "id": 50340,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50335,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8283:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8283:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50337,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8292:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8292:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50339,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50385,
                  "src": "8301:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50338,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8301:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8282:27:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50460,
            "nodeType": "FunctionDefinition",
            "src": "8902:825:47",
            "nodes": [],
            "body": {
              "id": 50459,
              "nodeType": "Block",
              "src": "9094:633:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50413],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50413,
                      "mutability": "mutable",
                      "name": "_collateral",
                      "nameLocation": "9133:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50459,
                      "src": "9104:40:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo"
                      },
                      "typeName": {
                        "id": 50412,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50411,
                          "name": "IVault.CollateralInfo",
                          "nameLocations": ["9104:6:47", "9111:14:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46135,
                          "src": "9104:21:47"
                        },
                        "referencedDeclaration": 46135,
                        "src": "9104:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                          "typeString": "struct IVault.CollateralInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50418,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50415,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50389,
                        "src": "9169:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50416,
                        "name": "_collateralToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50392,
                        "src": "9185:16:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Token_$46273",
                          "typeString": "contract ERC20Token"
                        }
                      ],
                      "id": 50414,
                      "name": "_getCollateralMapping",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49986,
                      "src": "9147:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_contract$_ERC20Token_$46273_$returns$_t_struct$_CollateralInfo_$46135_memory_ptr_$",
                        "typeString": "function (contract Vault,contract ERC20Token) view returns (struct IVault.CollateralInfo memory)"
                      }
                    },
                    "id": 50417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9147:55:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                      "typeString": "struct IVault.CollateralInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9104:98:47"
                },
                {
                  "assignments": [50423],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50423,
                      "mutability": "mutable",
                      "name": "_baseRateInfo",
                      "nameLocation": "9236:13:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50459,
                      "src": "9213:36:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                        "typeString": "struct IVault.RateInfo"
                      },
                      "typeName": {
                        "id": 50422,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50421,
                          "name": "IVault.RateInfo",
                          "nameLocations": ["9213:6:47", "9220:8:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46115,
                          "src": "9213:15:47"
                        },
                        "referencedDeclaration": 46115,
                        "src": "9213:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_storage_ptr",
                          "typeString": "struct IVault.RateInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50427,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50425,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50389,
                        "src": "9269:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      ],
                      "id": 50424,
                      "name": "_getBaseRateInfo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49936,
                      "src": "9252:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$returns$_t_struct$_RateInfo_$46115_memory_ptr_$",
                        "typeString": "function (contract Vault) view returns (struct IVault.RateInfo memory)"
                      }
                    },
                    "id": 50426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9252:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                      "typeString": "struct IVault.RateInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9213:71:47"
                },
                {
                  "assignments": [50429],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50429,
                      "mutability": "mutable",
                      "name": "_rate",
                      "nameLocation": "9302:5:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50459,
                      "src": "9294:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50428,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9294:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50439,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 50430,
                                "name": "_collateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50413,
                                "src": "9311:11:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                  "typeString": "struct IVault.CollateralInfo memory"
                                }
                              },
                              "id": 50431,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9323:8:47",
                              "memberName": "rateInfo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46126,
                              "src": "9311:20:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                "typeString": "struct IVault.RateInfo memory"
                              }
                            },
                            "id": 50432,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9332:4:47",
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46110,
                            "src": "9311:25:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "expression": {
                              "id": 50433,
                              "name": "_baseRateInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50423,
                              "src": "9339:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                "typeString": "struct IVault.RateInfo memory"
                              }
                            },
                            "id": 50434,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9353:4:47",
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46110,
                            "src": "9339:18:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9311:46:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50436,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "9310:48:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "hexValue": "333635",
                      "id": 50437,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9361:8:47",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31536000_by_1",
                        "typeString": "int_const 31536000"
                      },
                      "value": "365"
                    },
                    "src": "9310:59:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9294:75:47"
                },
                {
                  "assignments": [50441],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50441,
                      "mutability": "mutable",
                      "name": "_minDeposit",
                      "nameLocation": "9387:11:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50459,
                      "src": "9379:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50440,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9379:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50444,
                  "initialValue": {
                    "expression": {
                      "id": 50442,
                      "name": "_collateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50413,
                      "src": "9401:11:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                        "typeString": "struct IVault.CollateralInfo memory"
                      }
                    },
                    "id": 50443,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "9413:26:47",
                    "memberName": "collateralFloorPerPosition",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 46132,
                    "src": "9401:38:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9379:60:47"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 50445,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50413,
                          "src": "9471:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50446,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9483:24:47",
                        "memberName": "totalDepositedCollateral",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46117,
                        "src": "9471:36:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50447,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50413,
                          "src": "9521:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50448,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9533:19:47",
                        "memberName": "totalBorrowedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46119,
                        "src": "9521:31:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50449,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50413,
                          "src": "9566:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50450,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9578:20:47",
                        "memberName": "liquidationThreshold",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46121,
                        "src": "9566:32:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50451,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50413,
                          "src": "9612:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50452,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9624:11:47",
                        "memberName": "debtCeiling",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46130,
                        "src": "9612:23:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50453,
                        "name": "_rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50429,
                        "src": "9649:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50454,
                        "name": "_minDeposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50441,
                        "src": "9668:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 50455,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50413,
                          "src": "9693:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50456,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9705:5:47",
                        "memberName": "price",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46128,
                        "src": "9693:17:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 50457,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9457:263:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 50408,
                  "id": 50458,
                  "nodeType": "Return",
                  "src": "9450:270:47"
                }
              ]
            },
            "documentation": {
              "id": 50386,
              "nodeType": "StructuredDocumentation",
              "src": "8829:68:47",
              "text": " @dev returns a the relevant info for a collateral"
            },
            "functionSelector": "5d242b97",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCollateralInfo",
            "nameLocation": "8911:17:47",
            "parameters": {
              "id": 50393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50389,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "8935:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "8929:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50388,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50387,
                      "name": "Vault",
                      "nameLocations": ["8929:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "8929:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "8929:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50392,
                  "mutability": "mutable",
                  "name": "_collateralToken",
                  "nameLocation": "8962:16:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "8951:27:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Token_$46273",
                    "typeString": "contract ERC20Token"
                  },
                  "typeName": {
                    "id": 50391,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50390,
                      "name": "ERC20Token",
                      "nameLocations": ["8951:10:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46273,
                      "src": "8951:10:47"
                    },
                    "referencedDeclaration": 46273,
                    "src": "8951:10:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Token_$46273",
                      "typeString": "contract ERC20Token"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8928:51:47"
            },
            "returnParameters": {
              "id": 50408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50395,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9027:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50394,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9027:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50397,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9036:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9036:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50399,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9045:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50398,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9045:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50401,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9054:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9054:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50403,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9063:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9063:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50405,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9072:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9072:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50407,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50460,
                  "src": "9081:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50406,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9081:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9026:63:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50480,
            "nodeType": "FunctionDefinition",
            "src": "9852:181:47",
            "nodes": [],
            "body": {
              "id": 50479,
              "nodeType": "Block",
              "src": "9962:71:47",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 50475,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50466,
                        "src": "10006:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 50476,
                        "name": "_reliedUpon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50468,
                        "src": "10014:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 50473,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50464,
                        "src": "9979:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      "id": 50474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9994:11:47",
                      "memberName": "relyMapping",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46571,
                      "src": "9979:26:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address,address) view external returns (bool)"
                      }
                    },
                    "id": 50477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9979:47:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 50472,
                  "id": 50478,
                  "nodeType": "Return",
                  "src": "9972:54:47"
                }
              ]
            },
            "documentation": {
              "id": 50461,
              "nodeType": "StructuredDocumentation",
              "src": "9733:114:47",
              "text": " @dev returns if _owner has approved _reliedUpon to interact with _owner's vault on their behalf"
            },
            "functionSelector": "b09758f0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isReliedUpon",
            "nameLocation": "9861:12:47",
            "parameters": {
              "id": 50469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50464,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "9880:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50480,
                  "src": "9874:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50463,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50462,
                      "name": "Vault",
                      "nameLocations": ["9874:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "9874:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "9874:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50466,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "9904:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50480,
                  "src": "9896:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50465,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9896:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50468,
                  "mutability": "mutable",
                  "name": "_reliedUpon",
                  "nameLocation": "9920:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50480,
                  "src": "9912:19:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 50467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9912:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9873:59:47"
            },
            "returnParameters": {
              "id": 50472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50471,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50480,
                  "src": "9956:4:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 50470,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9956:4:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9955:6:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 50546,
            "nodeType": "FunctionDefinition",
            "src": "10307:1407:47",
            "nodes": [],
            "body": {
              "id": 50545,
              "nodeType": "Block",
              "src": "10494:1220:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50496, null],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50496,
                      "mutability": "mutable",
                      "name": "_unaccountedAccruedFees",
                      "nameLocation": "10859:23:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50545,
                      "src": "10851:31:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50495,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10851:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 50502,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50498,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50484,
                        "src": "10909:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      },
                      {
                        "id": 50499,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50487,
                        "src": "10925:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50500,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50490,
                        "src": "10938:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        },
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50497,
                      "name": "_calculateAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50656,
                      "src": "10887:21:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract Vault,struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) view returns (uint256,uint256)"
                      }
                    },
                    "id": 50501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10887:58:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10850:95:47"
                },
                {
                  "assignments": [50504],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50504,
                      "mutability": "mutable",
                      "name": "_totalUserDebt",
                      "nameLocation": "10963:14:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50545,
                      "src": "10955:22:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50503,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10955:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50512,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 50505,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50490,
                          "src": "10980:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50506,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10987:14:47",
                        "memberName": "borrowedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46139,
                        "src": "10980:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 50507,
                          "name": "_vault",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50490,
                          "src": "11004:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                            "typeString": "struct IVault.VaultInfo memory"
                          }
                        },
                        "id": 50508,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11011:11:47",
                        "memberName": "accruedFees",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46141,
                        "src": "11004:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "10980:42:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 50510,
                      "name": "_unaccountedAccruedFees",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50496,
                      "src": "11025:23:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10980:68:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10955:93:47"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50515,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50513,
                      "name": "_totalUserDebt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50504,
                      "src": "11102:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11120:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11102:19:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50518,
                  "nodeType": "IfStatement",
                  "src": "11098:33:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 50516,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11130:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 50494,
                    "id": 50517,
                    "nodeType": "Return",
                    "src": "11123:8:47"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 50519,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50490,
                        "src": "11300:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      },
                      "id": 50520,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11307:19:47",
                      "memberName": "depositedCollateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46137,
                      "src": "11300:26:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50521,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11330:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11300:31:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50529,
                  "nodeType": "IfStatement",
                  "src": "11296:61:47",
                  "trueBody": {
                    "expression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 50525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11345:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 50524,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11345:7:47",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 50523,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "11340:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 50526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11340:13:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 50527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "11354:3:47",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "11340:17:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 50494,
                    "id": 50528,
                    "nodeType": "Return",
                    "src": "11333:24:47"
                  }
                },
                {
                  "assignments": [50531],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50531,
                      "mutability": "mutable",
                      "name": "_collateralValueInCurrency",
                      "nameLocation": "11490:26:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50545,
                      "src": "11482:34:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50530,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11482:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50536,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50533,
                        "name": "_collateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50487,
                        "src": "11549:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        }
                      },
                      {
                        "id": 50534,
                        "name": "_vault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50490,
                        "src": "11562:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                          "typeString": "struct IVault.CollateralInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                          "typeString": "struct IVault.VaultInfo memory"
                        }
                      ],
                      "id": 50532,
                      "name": "_getCurrencyValueOfCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50577,
                      "src": "11519:29:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_struct$_VaultInfo_$46144_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct IVault.CollateralInfo memory,struct IVault.VaultInfo memory) pure returns (uint256)"
                      }
                    },
                    "id": 50535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11519:50:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11482:87:47"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 50538,
                              "name": "_totalUserDebt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50504,
                              "src": "11642:14:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 50539,
                              "name": "HUNDRED_PERCENTAGE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49869,
                              "src": "11659:18:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11642:35:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 50541,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "11641:37:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50542,
                        "name": "_collateralValueInCurrency",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50531,
                        "src": "11680:26:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50537,
                      "name": "_divUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50773,
                      "src": "11634:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 50543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11634:73:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50494,
                  "id": 50544,
                  "nodeType": "Return",
                  "src": "11627:80:47"
                }
              ]
            },
            "documentation": {
              "id": 50481,
              "nodeType": "StructuredDocumentation",
              "src": "10164:138:47",
              "text": " @dev returns the collateral ratio of a vault where anything below 1e18 is liquidatable\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCollateralRatio",
            "nameLocation": "10316:19:47",
            "parameters": {
              "id": 50491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50484,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "10351:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50546,
                  "src": "10345:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50483,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50482,
                      "name": "Vault",
                      "nameLocations": ["10345:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "10345:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "10345:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50487,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "10404:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50546,
                  "src": "10375:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50486,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50485,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["10375:6:47", "10382:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "10375:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "10375:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50490,
                  "mutability": "mutable",
                  "name": "_vault",
                  "nameLocation": "10449:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50546,
                  "src": "10425:30:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                    "typeString": "struct IVault.VaultInfo"
                  },
                  "typeName": {
                    "id": 50489,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50488,
                      "name": "IVault.VaultInfo",
                      "nameLocations": ["10425:6:47", "10432:9:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46144,
                      "src": "10425:16:47"
                    },
                    "referencedDeclaration": 46144,
                    "src": "10425:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                      "typeString": "struct IVault.VaultInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10335:126:47"
            },
            "returnParameters": {
              "id": 50494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50493,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50546,
                  "src": "10485:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10485:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10484:9:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50577,
            "nodeType": "FunctionDefinition",
            "src": "11861:446:47",
            "nodes": [],
            "body": {
              "id": 50576,
              "nodeType": "Block",
              "src": "12034:273:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50559],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50559,
                      "mutability": "mutable",
                      "name": "_currencyValueOfCollateral",
                      "nameLocation": "12052:26:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50576,
                      "src": "12044:34:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50558,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12044:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50573,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 50561,
                                  "name": "_collateral",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50550,
                                  "src": "12131:11:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                    "typeString": "struct IVault.CollateralInfo memory"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 50562,
                                    "name": "_vault",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50553,
                                    "src": "12144:6:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                                      "typeString": "struct IVault.VaultInfo memory"
                                    }
                                  },
                                  "id": 50563,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12151:19:47",
                                  "memberName": "depositedCollateral",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 46137,
                                  "src": "12144:26:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                    "typeString": "struct IVault.CollateralInfo memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 50560,
                                "name": "_scaleCollateralToExpectedPrecision",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50737,
                                "src": "12095:35:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_CollateralInfo_$46135_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (struct IVault.CollateralInfo memory,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 50564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12095:76:47",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "expression": {
                                "id": 50565,
                                "name": "_collateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50550,
                                "src": "12174:11:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                  "typeString": "struct IVault.CollateralInfo memory"
                                }
                              },
                              "id": 50566,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12186:5:47",
                              "memberName": "price",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46128,
                              "src": "12174:17:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12095:96:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 50568,
                            "name": "ADDITIONAL_FEED_PRECISION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 49872,
                            "src": "12210:25:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12095:140:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50570,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12081:164:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 50571,
                      "name": "PRECISION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49861,
                      "src": "12248:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12081:176:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12044:213:47"
                },
                {
                  "expression": {
                    "id": 50574,
                    "name": "_currencyValueOfCollateral",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 50559,
                    "src": "12274:26:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50557,
                  "id": 50575,
                  "nodeType": "Return",
                  "src": "12267:33:47"
                }
              ]
            },
            "documentation": {
              "id": 50547,
              "nodeType": "StructuredDocumentation",
              "src": "11720:136:47",
              "text": " @dev returns the conversion of a vaults deposited collateral to the vault's currency\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCurrencyValueOfCollateral",
            "nameLocation": "11870:29:47",
            "parameters": {
              "id": 50554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50550,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "11929:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50577,
                  "src": "11900:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50549,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50548,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["11900:6:47", "11907:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "11900:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "11900:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50553,
                  "mutability": "mutable",
                  "name": "_vault",
                  "nameLocation": "11966:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50577,
                  "src": "11942:30:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                    "typeString": "struct IVault.VaultInfo"
                  },
                  "typeName": {
                    "id": 50552,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50551,
                      "name": "IVault.VaultInfo",
                      "nameLocations": ["11942:6:47", "11949:9:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46144,
                      "src": "11942:16:47"
                    },
                    "referencedDeclaration": 46144,
                    "src": "11942:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                      "typeString": "struct IVault.VaultInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11899:74:47"
            },
            "returnParameters": {
              "id": 50557,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50556,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50577,
                  "src": "12021:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50555,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12021:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12020:9:47"
            },
            "scope": 50774,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50607,
            "nodeType": "FunctionDefinition",
            "src": "12454:354:47",
            "nodes": [],
            "body": {
              "id": 50606,
              "nodeType": "Block",
              "src": "12620:188:47",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 50589,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50583,
                              "src": "12658:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 50590,
                              "name": "PRECISION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 49861,
                              "src": "12668:9:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12658:19:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 50592,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "12657:21:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 50596,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 50593,
                                  "name": "_collateral",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50581,
                                  "src": "12693:11:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                    "typeString": "struct IVault.CollateralInfo memory"
                                  }
                                },
                                "id": 50594,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "12705:5:47",
                                "memberName": "price",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 46128,
                                "src": "12693:17:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 50595,
                                "name": "ADDITIONAL_FEED_PRECISION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 49872,
                                "src": "12713:25:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12693:45:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 50600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "3130",
                                    "id": 50597,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12742:2:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 50598,
                                      "name": "_collateral",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50581,
                                      "src": "12748:11:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                        "typeString": "struct IVault.CollateralInfo memory"
                                      }
                                    },
                                    "id": 50599,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "12760:29:47",
                                    "memberName": "additionalCollateralPrecision",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46134,
                                    "src": "12748:41:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "12742:47:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 50601,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "12741:49:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12693:97:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 50603,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "12692:99:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 50588,
                      "name": "_divUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50773,
                      "src": "12637:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 50604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12637:164:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50587,
                  "id": 50605,
                  "nodeType": "Return",
                  "src": "12630:171:47"
                }
              ]
            },
            "documentation": {
              "id": 50578,
              "nodeType": "StructuredDocumentation",
              "src": "12313:136:47",
              "text": " @dev returns the conversion of an amount of currency to a given supported collateral\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getCollateralAmountFromCurrencyValue",
            "nameLocation": "12463:37:47",
            "parameters": {
              "id": 50584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50581,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "12530:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50607,
                  "src": "12501:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50580,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50579,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["12501:6:47", "12508:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "12501:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "12501:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50583,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "12551:7:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50607,
                  "src": "12543:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50582,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12543:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12500:59:47"
            },
            "returnParameters": {
              "id": 50587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50586,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50607,
                  "src": "12607:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50585,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12607:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12606:9:47"
            },
            "scope": 50774,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50656,
            "nodeType": "FunctionDefinition",
            "src": "12948:625:47",
            "nodes": [],
            "body": {
              "id": 50655,
              "nodeType": "Block",
              "src": "13146:427:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50625],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50625,
                      "mutability": "mutable",
                      "name": "_totalCurrentAccumulatedRate",
                      "nameLocation": "13164:28:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50655,
                      "src": "13156:36:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50624,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13156:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50636,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 50631,
                            "name": "_vaultContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50611,
                            "src": "13290:14:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$48108",
                              "typeString": "contract Vault"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Vault_$48108",
                              "typeString": "contract Vault"
                            }
                          ],
                          "id": 50630,
                          "name": "_getBaseRateInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 49936,
                          "src": "13273:16:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$returns$_t_struct$_RateInfo_$46115_memory_ptr_$",
                            "typeString": "function (contract Vault) view returns (struct IVault.RateInfo memory)"
                          }
                        },
                        "id": 50632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13273:32:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 50633,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50614,
                          "src": "13307:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50634,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "13319:8:47",
                        "memberName": "rateInfo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46126,
                        "src": "13307:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 50626,
                            "name": "_vaultContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50611,
                            "src": "13195:14:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vault_$48108",
                              "typeString": "contract Vault"
                            }
                          },
                          "id": 50627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13210:10:47",
                          "memberName": "rateModule",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46542,
                          "src": "13195:25:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IRate_$46026_$",
                            "typeString": "function () view external returns (contract IRate)"
                          }
                        },
                        "id": 50628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13195:27:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IRate_$46026",
                          "typeString": "contract IRate"
                        }
                      },
                      "id": 50629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13223:36:47",
                      "memberName": "calculateCurrentTotalAccumulatedRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46017,
                      "src": "13195:64:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_struct$_RateInfo_$46115_memory_ptr_$_t_struct$_RateInfo_$46115_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct IVault.RateInfo memory,struct IVault.RateInfo memory) view external returns (uint256)"
                      }
                    },
                    "id": 50635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13195:142:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13156:181:47"
                },
                {
                  "assignments": [50638],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50638,
                      "mutability": "mutable",
                      "name": "_accruedFees",
                      "nameLocation": "13356:12:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50655,
                      "src": "13348:20:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50637,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13348:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50650,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 50642,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 50639,
                                  "name": "_totalCurrentAccumulatedRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50625,
                                  "src": "13386:28:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "expression": {
                                    "id": 50640,
                                    "name": "_vault",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50617,
                                    "src": "13417:6:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                                      "typeString": "struct IVault.VaultInfo memory"
                                    }
                                  },
                                  "id": 50641,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "13424:24:47",
                                  "memberName": "lastTotalAccumulatedRate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 46143,
                                  "src": "13417:31:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "13386:62:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 50643,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "13385:64:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "expression": {
                              "id": 50644,
                              "name": "_vault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50617,
                              "src": "13452:6:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                                "typeString": "struct IVault.VaultInfo memory"
                              }
                            },
                            "id": 50645,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13459:14:47",
                            "memberName": "borrowedAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46139,
                            "src": "13452:21:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13385:88:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50647,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13371:112:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 50648,
                      "name": "HUNDRED_PERCENTAGE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49869,
                      "src": "13486:18:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13371:133:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13348:156:47"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 50651,
                        "name": "_accruedFees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50638,
                        "src": "13523:12:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 50652,
                        "name": "_totalCurrentAccumulatedRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50625,
                        "src": "13537:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 50653,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13522:44:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 50623,
                  "id": 50654,
                  "nodeType": "Return",
                  "src": "13515:51:47"
                }
              ]
            },
            "documentation": {
              "id": 50608,
              "nodeType": "StructuredDocumentation",
              "src": "12814:129:47",
              "text": " @dev returns the fees accrued by a user's vault since `_vault.lastUpdateTime`\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateAccruedFees",
            "nameLocation": "12957:21:47",
            "parameters": {
              "id": 50618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50611,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "12994:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50656,
                  "src": "12988:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50610,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50609,
                      "name": "Vault",
                      "nameLocations": ["12988:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "12988:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "12988:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50614,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "13047:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50656,
                  "src": "13018:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50613,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50612,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["13018:6:47", "13025:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "13018:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "13018:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50617,
                  "mutability": "mutable",
                  "name": "_vault",
                  "nameLocation": "13092:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50656,
                  "src": "13068:30:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_VaultInfo_$46144_memory_ptr",
                    "typeString": "struct IVault.VaultInfo"
                  },
                  "typeName": {
                    "id": 50616,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50615,
                      "name": "IVault.VaultInfo",
                      "nameLocations": ["13068:6:47", "13075:9:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46144,
                      "src": "13068:16:47"
                    },
                    "referencedDeclaration": 46144,
                    "src": "13068:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_VaultInfo_$46144_storage_ptr",
                      "typeString": "struct IVault.VaultInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12978:126:47"
            },
            "returnParameters": {
              "id": 50623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50620,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50656,
                  "src": "13128:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50619,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13128:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50622,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50656,
                  "src": "13137:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13137:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13127:18:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50717,
            "nodeType": "FunctionDefinition",
            "src": "13779:928:47",
            "nodes": [],
            "body": {
              "id": 50716,
              "nodeType": "Block",
              "src": "13950:757:47",
              "nodes": [],
              "statements": [
                {
                  "assignments": [50669],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50669,
                      "mutability": "mutable",
                      "name": "_collateralCurrentAccumulatedRate",
                      "nameLocation": "14061:33:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50716,
                      "src": "14053:41:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50668,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14053:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50686,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 50670,
                          "name": "_collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 50663,
                          "src": "14097:11:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                            "typeString": "struct IVault.CollateralInfo memory"
                          }
                        },
                        "id": 50671,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14109:8:47",
                        "memberName": "rateInfo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46126,
                        "src": "14097:20:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      "id": 50672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14118:15:47",
                      "memberName": "accumulatedRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46112,
                      "src": "14097:36:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50683,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 50673,
                                "name": "_collateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 50663,
                                "src": "14149:11:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                  "typeString": "struct IVault.CollateralInfo memory"
                                }
                              },
                              "id": 50674,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14161:8:47",
                              "memberName": "rateInfo",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46126,
                              "src": "14149:20:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                "typeString": "struct IVault.RateInfo memory"
                              }
                            },
                            "id": 50675,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14170:4:47",
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46110,
                            "src": "14149:25:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 50681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 50676,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "14178:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 50677,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "14184:9:47",
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "14178:15:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 50678,
                                      "name": "_collateral",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50663,
                                      "src": "14196:11:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                        "typeString": "struct IVault.CollateralInfo memory"
                                      }
                                    },
                                    "id": 50679,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14208:8:47",
                                    "memberName": "rateInfo",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46126,
                                    "src": "14196:20:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                      "typeString": "struct IVault.RateInfo memory"
                                    }
                                  },
                                  "id": 50680,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "14217:14:47",
                                  "memberName": "lastUpdateTime",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 46114,
                                  "src": "14196:35:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14178:53:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 50682,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14177:55:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14149:83:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50684,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14148:85:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14097:136:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14053:180:47"
                },
                {
                  "assignments": [50691],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50691,
                      "mutability": "mutable",
                      "name": "_baseRateInfo",
                      "nameLocation": "14267:13:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50716,
                      "src": "14244:36:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                        "typeString": "struct IVault.RateInfo"
                      },
                      "typeName": {
                        "id": 50690,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 50689,
                          "name": "IVault.RateInfo",
                          "nameLocations": ["14244:6:47", "14251:8:47"],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 46115,
                          "src": "14244:15:47"
                        },
                        "referencedDeclaration": 46115,
                        "src": "14244:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_storage_ptr",
                          "typeString": "struct IVault.RateInfo"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50695,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 50693,
                        "name": "_vaultContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50660,
                        "src": "14300:14:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Vault_$48108",
                          "typeString": "contract Vault"
                        }
                      ],
                      "id": 50692,
                      "name": "_getBaseRateInfo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 49936,
                      "src": "14283:16:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_Vault_$48108_$returns$_t_struct$_RateInfo_$46115_memory_ptr_$",
                        "typeString": "function (contract Vault) view returns (struct IVault.RateInfo memory)"
                      }
                    },
                    "id": 50694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14283:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                      "typeString": "struct IVault.RateInfo memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14244:71:47"
                },
                {
                  "assignments": [50697],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 50697,
                      "mutability": "mutable",
                      "name": "_baseCurrentAccumulatedRate",
                      "nameLocation": "14415:27:47",
                      "nodeType": "VariableDeclaration",
                      "scope": 50716,
                      "src": "14407:35:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 50696,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14407:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 50711,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 50698,
                        "name": "_baseRateInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50691,
                        "src": "14457:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                          "typeString": "struct IVault.RateInfo memory"
                        }
                      },
                      "id": 50699,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14471:15:47",
                      "memberName": "accumulatedRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46112,
                      "src": "14457:29:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 50700,
                              "name": "_baseRateInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50691,
                              "src": "14490:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                "typeString": "struct IVault.RateInfo memory"
                              }
                            },
                            "id": 50701,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14504:4:47",
                            "memberName": "rate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46110,
                            "src": "14490:18:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 50706,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 50702,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "14512:5:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 50703,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "14518:9:47",
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "14512:15:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "expression": {
                                    "id": 50704,
                                    "name": "_baseRateInfo",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50691,
                                    "src": "14530:13:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RateInfo_$46115_memory_ptr",
                                      "typeString": "struct IVault.RateInfo memory"
                                    }
                                  },
                                  "id": 50705,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "14544:14:47",
                                  "memberName": "lastUpdateTime",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 46114,
                                  "src": "14530:28:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14512:46:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 50707,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14511:48:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14490:69:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50709,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14489:71:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14457:103:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14407:153:47"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50712,
                      "name": "_collateralCurrentAccumulatedRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50669,
                      "src": "14637:33:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 50713,
                      "name": "_baseCurrentAccumulatedRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50697,
                      "src": "14673:27:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14637:63:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50667,
                  "id": 50715,
                  "nodeType": "Return",
                  "src": "14630:70:47"
                }
              ]
            },
            "documentation": {
              "id": 50657,
              "nodeType": "StructuredDocumentation",
              "src": "13579:195:47",
              "text": " @dev returns the current total accumulated rate i.e current accumulated base rate + current accumulated collateral rate of the given collateral\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateCurrentTotalAccumulatedRate",
            "nameLocation": "13788:37:47",
            "parameters": {
              "id": 50664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50660,
                  "mutability": "mutable",
                  "name": "_vaultContract",
                  "nameLocation": "13832:14:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50717,
                  "src": "13826:20:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vault_$48108",
                    "typeString": "contract Vault"
                  },
                  "typeName": {
                    "id": 50659,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50658,
                      "name": "Vault",
                      "nameLocations": ["13826:5:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48108,
                      "src": "13826:5:47"
                    },
                    "referencedDeclaration": 48108,
                    "src": "13826:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Vault_$48108",
                      "typeString": "contract Vault"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50663,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "13877:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50717,
                  "src": "13848:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50662,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50661,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["13848:6:47", "13855:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "13848:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "13848:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13825:64:47"
            },
            "returnParameters": {
              "id": 50667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50666,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50717,
                  "src": "13937:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50665,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13937:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13936:9:47"
            },
            "scope": 50774,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50737,
            "nodeType": "FunctionDefinition",
            "src": "14826:245:47",
            "nodes": [],
            "body": {
              "id": 50736,
              "nodeType": "Block",
              "src": "14989:82:47",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50728,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50723,
                      "src": "15006:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 50732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "3130",
                            "id": 50729,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15016:2:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10_by_1",
                              "typeString": "int_const 10"
                            },
                            "value": "10"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "expression": {
                              "id": 50730,
                              "name": "_collateral",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50721,
                              "src": "15022:11:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                                "typeString": "struct IVault.CollateralInfo memory"
                              }
                            },
                            "id": 50731,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15034:29:47",
                            "memberName": "additionalCollateralPrecision",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46134,
                            "src": "15022:41:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15016:47:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 50733,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "15015:49:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15006:58:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 50727,
                  "id": 50735,
                  "nodeType": "Return",
                  "src": "14999:65:47"
                }
              ]
            },
            "documentation": {
              "id": 50718,
              "nodeType": "StructuredDocumentation",
              "src": "14713:108:47",
              "text": " @dev scales a given collateral to be represented in 1e18\n @dev should never revert!"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_scaleCollateralToExpectedPrecision",
            "nameLocation": "14835:35:47",
            "parameters": {
              "id": 50724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50721,
                  "mutability": "mutable",
                  "name": "_collateral",
                  "nameLocation": "14900:11:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50737,
                  "src": "14871:40:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CollateralInfo_$46135_memory_ptr",
                    "typeString": "struct IVault.CollateralInfo"
                  },
                  "typeName": {
                    "id": 50720,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 50719,
                      "name": "IVault.CollateralInfo",
                      "nameLocations": ["14871:6:47", "14878:14:47"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46135,
                      "src": "14871:21:47"
                    },
                    "referencedDeclaration": 46135,
                    "src": "14871:21:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CollateralInfo_$46135_storage_ptr",
                      "typeString": "struct IVault.CollateralInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50723,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "14921:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50737,
                  "src": "14913:14:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50722,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14913:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14870:58:47"
            },
            "returnParameters": {
              "id": 50727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50726,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 50737,
                  "src": "14976:7:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50725,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14976:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14975:9:47"
            },
            "scope": 50774,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 50773,
            "nodeType": "FunctionDefinition",
            "src": "15330:178:47",
            "nodes": [],
            "body": {
              "id": 50772,
              "nodeType": "Block",
              "src": "15404:104:47",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50747,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50742,
                      "src": "15418:2:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50748,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15424:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15418:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50753,
                  "nodeType": "IfStatement",
                  "src": "15414:21:47",
                  "trueBody": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 50750,
                        "name": "revert",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [-19, -19],
                        "referencedDeclaration": -19,
                        "src": "15427:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 50751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15427:8:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 50752,
                    "nodeType": "ExpressionStatement",
                    "src": "15427:8:47"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 50756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 50754,
                      "name": "_a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50740,
                      "src": "15449:2:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 50755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15455:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15449:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 50759,
                  "nodeType": "IfStatement",
                  "src": "15445:21:47",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 50757,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15465:1:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 50746,
                    "id": 50758,
                    "nodeType": "Return",
                    "src": "15458:8:47"
                  }
                },
                {
                  "expression": {
                    "id": 50770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 50760,
                      "name": "_c",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 50745,
                      "src": "15477:2:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 50769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "31",
                        "id": 50761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15482:1:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 50767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 50764,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 50762,
                                    "name": "_a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50740,
                                    "src": "15488:2:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 50763,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15493:1:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "15488:6:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 50765,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "15487:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 50766,
                              "name": "_b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 50742,
                              "src": "15498:2:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15487:13:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 50768,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "15486:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "15482:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15477:24:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 50771,
                  "nodeType": "ExpressionStatement",
                  "src": "15477:24:47"
                }
              ]
            },
            "documentation": {
              "id": 50738,
              "nodeType": "StructuredDocumentation",
              "src": "15077:248:47",
              "text": " @dev divides `_a` by `_b` and rounds the result `_c` up to the next whole number\n @dev if `_a` is 0, return 0 early as it will revert with underflow error when calculating divUp below\n @dev reverts if `_b` is 0"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_divUp",
            "nameLocation": "15339:6:47",
            "parameters": {
              "id": 50743,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50740,
                  "mutability": "mutable",
                  "name": "_a",
                  "nameLocation": "15354:2:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50773,
                  "src": "15346:10:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15346:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50742,
                  "mutability": "mutable",
                  "name": "_b",
                  "nameLocation": "15366:2:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50773,
                  "src": "15358:10:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50741,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15358:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15345:24:47"
            },
            "returnParameters": {
              "id": 50746,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50745,
                  "mutability": "mutable",
                  "name": "_c",
                  "nameLocation": "15400:2:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 50773,
                  "src": "15392:10:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50744,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15392:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15391:12:47"
            },
            "scope": 50774,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "VaultGetters",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [50774],
        "name": "VaultGetters",
        "nameLocation": "271:12:47",
        "scope": 50775,
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "license": "MIT"
  },
  "id": 47
}
