{
  "contractName": "CToken",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ComptrollerInterface",
          "name": "comptroller_",
          "type": "address"
        },
        {
          "internalType": "contract InterestRateModel",
          "name": "interestRateModel_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "initialExchangeRateMantissa_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "decimals_",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestAccumulated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "AccrueInterest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "error",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "info",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "detail",
          "type": "uint256"
        }
      ],
      "name": "Failure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "cTokenCollateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "LiquidateBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "minter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mintTokens",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "NewAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract ComptrollerInterface",
          "name": "oldComptroller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract ComptrollerInterface",
          "name": "newComptroller",
          "type": "address"
        }
      ],
      "name": "NewComptroller",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "oldInterestRateModel",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "NewMarketInterestRateModel",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldPendingAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "NewPendingAdmin",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldReserveFactorMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "NewReserveFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "redeemer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemTokens",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accountBorrows",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalBorrows",
          "type": "uint256"
        }
      ],
      "name": "RepayBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalReserves",
          "type": "uint256"
        }
      ],
      "name": "ReservesReduced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "accrualBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "comptroller",
      "outputs": [
        {
          "internalType": "contract ComptrollerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialExchangeRateMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "interestRateModel",
      "outputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isCToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pendingAdmin",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reserveFactorMantissa",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalBorrows",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "src",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "dst",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOfUnderlying",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getAccountSnapshot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "borrowRatePerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supplyRatePerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "totalBorrowsCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "borrowBalanceStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "exchangeRateCurrent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "exchangeRateStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCash",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "accrueInterest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "liquidator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "seizeTokens",
          "type": "uint256"
        }
      ],
      "name": "seize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "newPendingAdmin",
          "type": "address"
        }
      ],
      "name": "_setPendingAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "_acceptAdmin",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ComptrollerInterface",
          "name": "newComptroller",
          "type": "address"
        }
      ],
      "name": "_setComptroller",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newReserveFactorMantissa",
          "type": "uint256"
        }
      ],
      "name": "_setReserveFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reduceAmount",
          "type": "uint256"
        }
      ],
      "name": "_reduceReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract InterestRateModel",
          "name": "newInterestRateModel",
          "type": "address"
        }
      ],
      "name": "_setInterestRateModel",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"comptroller_\",\"type\":\"address\"},{\"internalType\":\"contract InterestRateModel\",\"name\":\"interestRateModel_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialExchangeRateMantissa_\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAccumulated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"AccrueInterest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"info\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"detail\",\"type\":\"uint256\"}],\"name\":\"Failure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"cTokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"LiquidateBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"NewComptroller\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract InterestRateModel\",\"name\":\"oldInterestRateModel\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewMarketInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPendingAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewReserveFactor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"RepayBorrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesReduced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[],\"name\":\"_acceptAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"}],\"name\":\"_reduceReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"_setComptroller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"_setInterestRateModel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"_setPendingAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"_setReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"accrueInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contract ComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"exchangeRateCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialExchangeRateMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contract InterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isCToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"supplyRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"totalBorrowsCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Compound\",\"methods\":{\"_acceptAdmin()\":{\"details\":\"Admin function for pending admin to accept role and update admin\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_reduceReserves(uint256)\":{\"params\":{\"reduceAmount\":\"Amount of reduction to reserves\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setComptroller(address)\":{\"details\":\"Admin function to set a new comptroller\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setInterestRateModel(address)\":{\"details\":\"Admin function to accrue interest and update the interest rate model\",\"params\":{\"newInterestRateModel\":\"the new interest rate model to use\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"_setPendingAdmin(address)\":{\"details\":\"Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\",\"params\":{\"newPendingAdmin\":\"New pending admin.\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?\"},\"_setReserveFactor(uint256)\":{\"details\":\"Admin function to accrue interest and set a new reserve factor\",\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"accrueInterest()\":{\"details\":\"This calculates interest accrued from the last checkpointed block     up to the current block and writes new checkpoint to storage.\"},\"allowance(address,address)\":{\"params\":{\"owner\":\"The address of the account which owns the tokens to be spent\",\"spender\":\"The address of the account which may transfer tokens\"},\"return\":\"The number of tokens allowed to be spent (-1 means infinite)\"},\"approve(address,uint256)\":{\"details\":\"This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\",\"params\":{\"amount\":\"The number of tokens that are approved (-1 means infinite)\",\"spender\":\"The address of the account which may transfer tokens\"},\"return\":\"Whether or not the approval succeeded\"},\"balanceOf(address)\":{\"params\":{\"owner\":\"The address of the account to query\"},\"return\":\"The number of tokens owned by `owner`\"},\"balanceOfUnderlying(address)\":{\"details\":\"This also accrues interest in a transaction\",\"params\":{\"owner\":\"The address of the account to query\"},\"return\":\"The amount of underlying owned by `owner`\"},\"borrowBalanceCurrent(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated after updating borrowIndex\"},\"return\":\"The calculated balance\"},\"borrowBalanceStored(address)\":{\"params\":{\"account\":\"The address whose balance should be calculated\"},\"return\":\"The calculated balance\"},\"borrowRatePerBlock()\":{\"return\":\"The borrow interest rate per block, scaled by 1e18\"},\"constructor\":{\"params\":{\"comptroller_\":\"The address of the Comptroller\",\"decimals_\":\"EIP-20 decimal precision of this token\",\"initialExchangeRateMantissa_\":\"The initial exchange rate, scaled by 1e18\",\"interestRateModel_\":\"The address of the interest rate model\",\"name_\":\"EIP-20 name of this token\",\"symbol_\":\"EIP-20 symbol of this token\"}},\"exchangeRateCurrent()\":{\"return\":\"Calculated exchange rate scaled by 1e18\"},\"exchangeRateStored()\":{\"details\":\"This function does not accrue interest before calculating the exchange rate\",\"return\":\"Calculated exchange rate scaled by 1e18\"},\"getAccountSnapshot(address)\":{\"details\":\"This is used by comptroller to more efficiently perform liquidity checks.\",\"params\":{\"account\":\"Address of the account to snapshot\"},\"return\":\"(possible error, token balance, borrow balance, exchange rate mantissa)\"},\"getCash()\":{\"return\":\"The quantity of underlying asset owned by this contract\"},\"seize(address,address,uint256)\":{\"details\":\"Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.\",\"params\":{\"borrower\":\"The account having collateral seized\",\"liquidator\":\"The account receiving seized collateral\",\"seizeTokens\":\"The number of cTokens to seize\"},\"return\":\"uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\"},\"supplyRatePerBlock()\":{\"return\":\"The supply interest rate per block, scaled by 1e18\"},\"totalBorrowsCurrent()\":{\"return\":\"The total borrows with interest\"},\"transfer(address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\"},\"return\":\"Whether or not the transfer succeeded\"},\"transferFrom(address,address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to transfer\",\"dst\":\"The address of the destination account\",\"src\":\"The address of the source account\"},\"return\":\"Whether or not the transfer succeeded\"}},\"title\":\"Compound's CToken Contract\"},\"userdoc\":{\"methods\":{\"_acceptAdmin()\":{\"notice\":\"Accepts transfer of admin rights. msg.sender must be pendingAdmin\"},\"_reduceReserves(uint256)\":{\"notice\":\"Accrues interest and reduces reserves by transferring to admin\"},\"_setComptroller(address)\":{\"notice\":\"Sets a new comptroller for the market\"},\"_setInterestRateModel(address)\":{\"notice\":\"accrues interest and updates the interest rate model using _setInterestRateModelFresh\"},\"_setPendingAdmin(address)\":{\"notice\":\"Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\"},\"_setReserveFactor(uint256)\":{\"notice\":\"accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\"},\"accrueInterest()\":{\"notice\":\"Applies accrued interest to total borrows and reserves.\"},\"allowance(address,address)\":{\"notice\":\"Get the current allowance from `owner` for `spender`\"},\"approve(address,uint256)\":{\"notice\":\"Approve `spender` to transfer up to `amount` from `src`\"},\"balanceOf(address)\":{\"notice\":\"Get the token balance of the `owner`\"},\"balanceOfUnderlying(address)\":{\"notice\":\"Get the underlying balance of the `owner`\"},\"borrowBalanceCurrent(address)\":{\"notice\":\"Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\"},\"borrowBalanceStored(address)\":{\"notice\":\"Return the borrow balance of account based on stored data\"},\"borrowRatePerBlock()\":{\"notice\":\"Returns the current per-block borrow interest rate for this cToken\"},\"constructor\":\"Construct a new money market\",\"exchangeRateCurrent()\":{\"notice\":\"Accrue interest then return the up-to-date exchange rate\"},\"exchangeRateStored()\":{\"notice\":\"Calculates the exchange rate from the underlying to the CToken\"},\"getAccountSnapshot(address)\":{\"notice\":\"Get a snapshot of the account's balances, and the cached exchange rate\"},\"getCash()\":{\"notice\":\"Get cash balance of this cToken in the underlying asset\"},\"seize(address,address,uint256)\":{\"notice\":\"Transfers collateral tokens (this market) to the liquidator.\"},\"supplyRatePerBlock()\":{\"notice\":\"Returns the current per-block supply interest rate for this cToken\"},\"totalBorrowsCurrent()\":{\"notice\":\"Returns the current total borrows plus accrued interest\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `msg.sender` to `dst`\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `src` to `dst`\"}},\"notice\":\"Abstract base for CTokens\"}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol\":\"CToken\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol\":{\"keccak256\":\"0xf9e6eb4ce700c024efaa3bb367a191f8bf98471e9fff6854f55eb81f69d6be68\",\"urls\":[\"bzz-raw://1a036193c252f3995667652d57fc424b54774af0a85813621bd86c6d1fc3bfbb\",\"dweb:/ipfs/Qmck2Ab2tC4vaTjfntexeoAgpggdw2czWPoAgR3JHmukMf\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CarefulMath.sol\":{\"keccak256\":\"0xbeb605bfb980199c42701b9557bcffffa3a845c6386adfc6130568d9f3f38495\",\"urls\":[\"bzz-raw://6595932dbb88fb67d81694ab43f9dd42124e3db91d3b29d8c226577c1a96481a\",\"dweb:/ipfs/Qmb66bD8XPmJBH1eShryFwWUAWEyAx4uHzDdLQs1mZMVTe\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ComptrollerInterface.sol\":{\"keccak256\":\"0xde6c4cb111e4d36ec44f350299a5b585d9a45636189e25a814d7b9f2dbb822af\",\"urls\":[\"bzz-raw://a67fcb86ceabbd676cff39ce557a74b726879af516f33557e1fb618bff68d295\",\"dweb:/ipfs/QmbD6qN2xXE2zmqjkNo3TED5deEziS3V5yrDNL4nAvi2GB\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20Interface.sol\":{\"keccak256\":\"0x8bef6d59a76c8541a034a403357b73dcb50d75847259371b7bdd64f5609ca674\",\"urls\":[\"bzz-raw://b5dd267ee3867de45e4c6491782fcf7259ce9265cf01e7bdf49612c4852f721f\",\"dweb:/ipfs/QmbLiQf3NSTetqHiNVog42wADgQEvVDRxfBjZJ6ouL3D5e\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol\":{\"keccak256\":\"0x3f0cb233287ad13e45a46b4fa63dbad2c63a17d0647049c04f487bf3c71c8cac\",\"urls\":[\"bzz-raw://b6b34d0f897d0a2917d2e6567e95a21bd7e0b25adc172c431c40fdae96cc5504\",\"dweb:/ipfs/QmV32L6X3fHz6kFgS5VQkm24cZxre4jMEdexjLZ6DVCgCi\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol\":{\"keccak256\":\"0x5578daa70764231d35e464fdb46d473d1a08c727ef5676c7b12015948b218dbf\",\"urls\":[\"bzz-raw://ef86f477727842fea96169716f57a53b1307d9f0d4770d5963c0df0ef029f0d0\",\"dweb:/ipfs/Qmahf4aXZGnMMmuY6gebrTCWd64rPHuToSeqhkeFXL7T62\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/InterestRateModel.sol\":{\"keccak256\":\"0x1aca227009cbde84beabddc89823f55130c2519823d4669d4e714a2a798af6c2\",\"urls\":[\"bzz-raw://cb8fc34b58cd973fa29d1636a5ecf02858f355f477ffc7525acf62e1c3aa5977\",\"dweb:/ipfs/QmXiAaRwvSw7FFLzuyJD7zwxZrGAhLEo4APJZjDc8yXYem\"]},\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x185090f837286a2757b50a3535fc78b1409a1f261fcc375c05ef86a348026488\",\"urls\":[\"bzz-raw://c7f61e912a2d9649e89f6a2fa0c4a574178003da8775edb6f14959df1ab76796\",\"dweb:/ipfs/QmVtSqyJfhJkrCjJbmcw8MWCC6zNcoPW7Nyr2uXhJfYyCV\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./EIP20Interface.sol\";\nimport \"./Exponential.sol\";\nimport \"./ErrorReporter.sol\";\nimport \"./ReentrancyGuard.sol\";\nimport \"./ComptrollerInterface.sol\";\nimport \"./InterestRateModel.sol\";\n\n/**\n * @title Compound's CToken Contract\n * @notice Abstract base for CTokens\n * @author Compound\n */\ncontract CToken is EIP20Interface, Exponential, TokenErrorReporter, ReentrancyGuard {\n    /**\n     * @notice Indicator that this is a CToken contract (for inspection)\n     */\n    bool public constant isCToken = true;\n\n    /**\n     * @notice EIP-20 token name for this token\n     */\n    string public name;\n\n    /**\n     * @notice EIP-20 token symbol for this token\n     */\n    string public symbol;\n\n    /**\n     * @notice EIP-20 token decimals for this token\n     */\n    uint256 public decimals;\n\n    /**\n     * @notice Maximum borrow rate that can ever be applied (.0005% / block)\n     */\n    uint256 constant borrowRateMaxMantissa = 5e14;\n\n    /**\n     * @notice Maximum fraction of interest that can be set aside for reserves\n     */\n    uint256 constant reserveFactorMaxMantissa = 1e18;\n\n    /**\n     * @notice Administrator for this contract\n     */\n    address payable public admin;\n\n    /**\n     * @notice Pending administrator for this contract\n     */\n    address payable public pendingAdmin;\n\n    /**\n     * @notice Contract which oversees inter-cToken operations\n     */\n    ComptrollerInterface public comptroller;\n\n    /**\n     * @notice Model which tells what the current interest rate should be\n     */\n    InterestRateModel public interestRateModel;\n\n    /**\n     * @notice Initial exchange rate used when minting the first CTokens (used when totalSupply = 0)\n     */\n    uint256 public initialExchangeRateMantissa;\n\n    /**\n     * @notice Fraction of interest currently set aside for reserves\n     */\n    uint256 public reserveFactorMantissa;\n\n    /**\n     * @notice Block number that interest was last accrued at\n     */\n    uint256 public accrualBlockNumber;\n\n    /**\n     * @notice Accumulator of total earned interest since the opening of the market\n     */\n    uint256 public borrowIndex;\n\n    /**\n     * @notice Total amount of outstanding borrows of the underlying in this market\n     */\n    uint256 public totalBorrows;\n\n    /**\n     * @notice Total amount of reserves of the underlying held in this market\n     */\n    uint256 public totalReserves;\n\n    /**\n     * @notice Total number of tokens in circulation\n     */\n    uint256 public totalSupply;\n\n    /**\n     * @notice Official record of token balances for each account\n     */\n    mapping(address => uint256) accountTokens;\n\n    /**\n     * @notice Approved token transfer amounts on behalf of others\n     */\n    mapping(address => mapping(address => uint256)) transferAllowances;\n\n    /**\n     * @notice Container for borrow balance information\n     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action\n     * @member interestIndex Global borrowIndex as of the most recent balance-changing action\n     */\n    struct BorrowSnapshot {\n        uint256 principal;\n        uint256 interestIndex;\n    }\n\n    /**\n     * @notice Mapping of account addresses to outstanding borrow balances\n     */\n    mapping(address => BorrowSnapshot) accountBorrows;\n\n    /*** Market Events ***/\n\n    /**\n     * @notice Event emitted when interest is accrued\n     */\n    event AccrueInterest(uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows);\n\n    /**\n     * @notice Event emitted when tokens are minted\n     */\n    event Mint(address minter, uint256 mintAmount, uint256 mintTokens);\n\n    /**\n     * @notice Event emitted when tokens are redeemed\n     */\n    event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens);\n\n    /**\n     * @notice Event emitted when underlying is borrowed\n     */\n    event Borrow(address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows);\n\n    /**\n     * @notice Event emitted when a borrow is repaid\n     */\n    event RepayBorrow(\n        address payer,\n        address borrower,\n        uint256 repayAmount,\n        uint256 accountBorrows,\n        uint256 totalBorrows\n    );\n\n    /**\n     * @notice Event emitted when a borrow is liquidated\n     */\n    event LiquidateBorrow(\n        address liquidator,\n        address borrower,\n        uint256 repayAmount,\n        address cTokenCollateral,\n        uint256 seizeTokens\n    );\n\n    /*** Admin Events ***/\n\n    /**\n     * @notice Event emitted when pendingAdmin is changed\n     */\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\n\n    /**\n     * @notice Event emitted when pendingAdmin is accepted, which means admin is updated\n     */\n    event NewAdmin(address oldAdmin, address newAdmin);\n\n    /**\n     * @notice Event emitted when comptroller is changed\n     */\n    event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller);\n\n    /**\n     * @notice Event emitted when interestRateModel is changed\n     */\n    event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel);\n\n    /**\n     * @notice Event emitted when the reserve factor is changed\n     */\n    event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa);\n\n    /**\n     * @notice Event emitted when the reserves are reduced\n     */\n    event ReservesReduced(address admin, uint256 reduceAmount, uint256 newTotalReserves);\n\n    /**\n     * @notice Construct a new money market\n     * @param comptroller_ The address of the Comptroller\n     * @param interestRateModel_ The address of the interest rate model\n     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n     * @param name_ EIP-20 name of this token\n     * @param symbol_ EIP-20 symbol of this token\n     * @param decimals_ EIP-20 decimal precision of this token\n     */\n    constructor(\n        ComptrollerInterface comptroller_,\n        InterestRateModel interestRateModel_,\n        uint256 initialExchangeRateMantissa_,\n        string memory name_,\n        string memory symbol_,\n        uint256 decimals_\n    ) internal {\n        // Set admin to msg.sender\n        admin = msg.sender;\n\n        // Set initial exchange rate\n        initialExchangeRateMantissa = initialExchangeRateMantissa_;\n        require(initialExchangeRateMantissa > 0, \"Initial exchange rate must be greater than zero.\");\n\n        // Set the comptroller\n        uint256 err = _setComptroller(comptroller_);\n        require(err == uint256(Error.NO_ERROR), \"Setting comptroller failed\");\n\n        // Initialize block number and borrow index (block number mocks depend on comptroller being set)\n        accrualBlockNumber = getBlockNumber();\n        borrowIndex = mantissaOne;\n\n        // Set the interest rate model (depends on block number / borrow index)\n        err = _setInterestRateModelFresh(interestRateModel_);\n        require(err == uint256(Error.NO_ERROR), \"Setting interest rate model failed\");\n\n        name = name_;\n        symbol = symbol_;\n        decimals = decimals_;\n    }\n\n    /**\n     * @notice Transfer `tokens` tokens from `src` to `dst` by `spender`\n     * @dev Called by both `transfer` and `transferFrom` internally\n     * @param spender The address of the account performing the transfer\n     * @param src The address of the source account\n     * @param dst The address of the destination account\n     * @param tokens The number of tokens to transfer\n     * @return Whether or not the transfer succeeded\n     */\n    function transferTokens(address spender, address src, address dst, uint256 tokens) internal returns (uint256) {\n        /* Fail if transfer not allowed */\n        uint256 allowed = comptroller.transferAllowed(address(this), src, dst, tokens);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.TRANSFER_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Do not allow self-transfers */\n        if (src == dst) {\n            return fail(Error.BAD_INPUT, FailureInfo.TRANSFER_NOT_ALLOWED);\n        }\n\n        /* Get the allowance, infinite for the account owner */\n        uint256 startingAllowance = 0;\n        if (spender == src) {\n            startingAllowance = uint256(-1);\n        } else {\n            startingAllowance = transferAllowances[src][spender];\n        }\n\n        /* Do the calculations, checking for {under,over}flow */\n        MathError mathErr;\n        uint256 allowanceNew;\n        uint256 srcTokensNew;\n        uint256 dstTokensNew;\n\n        (mathErr, allowanceNew) = subUInt(startingAllowance, tokens);\n        if (mathErr != MathError.NO_ERROR) {\n            return fail(Error.MATH_ERROR, FailureInfo.TRANSFER_NOT_ALLOWED);\n        }\n\n        (mathErr, srcTokensNew) = subUInt(accountTokens[src], tokens);\n        if (mathErr != MathError.NO_ERROR) {\n            return fail(Error.MATH_ERROR, FailureInfo.TRANSFER_NOT_ENOUGH);\n        }\n\n        (mathErr, dstTokensNew) = addUInt(accountTokens[dst], tokens);\n        if (mathErr != MathError.NO_ERROR) {\n            return fail(Error.MATH_ERROR, FailureInfo.TRANSFER_TOO_MUCH);\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        accountTokens[src] = srcTokensNew;\n        accountTokens[dst] = dstTokensNew;\n\n        /* Eat some of the allowance (if necessary) */\n        if (startingAllowance != uint256(-1)) {\n            transferAllowances[src][spender] = allowanceNew;\n        }\n\n        /* We emit a Transfer event */\n        emit Transfer(src, dst, tokens);\n\n        /* We call the defense hook (which checks for under-collateralization) */\n        comptroller.transferVerify(address(this), src, dst, tokens);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Transfer `amount` tokens from `msg.sender` to `dst`\n     * @param dst The address of the destination account\n     * @param amount The number of tokens to transfer\n     * @return Whether or not the transfer succeeded\n     */\n    function transfer(address dst, uint256 amount) external nonReentrant returns (bool) {\n        return transferTokens(msg.sender, msg.sender, dst, amount) == uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Transfer `amount` tokens from `src` to `dst`\n     * @param src The address of the source account\n     * @param dst The address of the destination account\n     * @param amount The number of tokens to transfer\n     * @return Whether or not the transfer succeeded\n     */\n    function transferFrom(address src, address dst, uint256 amount) external nonReentrant returns (bool) {\n        return transferTokens(msg.sender, src, dst, amount) == uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Approve `spender` to transfer up to `amount` from `src`\n     * @dev This will overwrite the approval amount for `spender`\n     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n     * @param spender The address of the account which may transfer tokens\n     * @param amount The number of tokens that are approved (-1 means infinite)\n     * @return Whether or not the approval succeeded\n     */\n    function approve(address spender, uint256 amount) external returns (bool) {\n        address src = msg.sender;\n        transferAllowances[src][spender] = amount;\n        emit Approval(src, spender, amount);\n        return true;\n    }\n\n    /**\n     * @notice Get the current allowance from `owner` for `spender`\n     * @param owner The address of the account which owns the tokens to be spent\n     * @param spender The address of the account which may transfer tokens\n     * @return The number of tokens allowed to be spent (-1 means infinite)\n     */\n    function allowance(address owner, address spender) external view returns (uint256) {\n        return transferAllowances[owner][spender];\n    }\n\n    /**\n     * @notice Get the token balance of the `owner`\n     * @param owner The address of the account to query\n     * @return The number of tokens owned by `owner`\n     */\n    function balanceOf(address owner) external view returns (uint256) {\n        return accountTokens[owner];\n    }\n\n    /**\n     * @notice Get the underlying balance of the `owner`\n     * @dev This also accrues interest in a transaction\n     * @param owner The address of the account to query\n     * @return The amount of underlying owned by `owner`\n     */\n    function balanceOfUnderlying(address owner) external returns (uint256) {\n        Exp memory exchangeRate = Exp({mantissa: exchangeRateCurrent()});\n        (MathError mErr, uint256 balance) = mulScalarTruncate(exchangeRate, accountTokens[owner]);\n        require(mErr == MathError.NO_ERROR);\n        return balance;\n    }\n\n    /**\n     * @notice Get a snapshot of the account's balances, and the cached exchange rate\n     * @dev This is used by comptroller to more efficiently perform liquidity checks.\n     * @param account Address of the account to snapshot\n     * @return (possible error, token balance, borrow balance, exchange rate mantissa)\n     */\n    function getAccountSnapshot(address account) external view returns (uint256, uint256, uint256, uint256) {\n        uint256 cTokenBalance = accountTokens[account];\n        uint256 borrowBalance;\n        uint256 exchangeRateMantissa;\n\n        MathError mErr;\n\n        (mErr, borrowBalance) = borrowBalanceStoredInternal(account);\n        if (mErr != MathError.NO_ERROR) {\n            return (uint256(Error.MATH_ERROR), 0, 0, 0);\n        }\n\n        (mErr, exchangeRateMantissa) = exchangeRateStoredInternal();\n        if (mErr != MathError.NO_ERROR) {\n            return (uint256(Error.MATH_ERROR), 0, 0, 0);\n        }\n\n        return (uint256(Error.NO_ERROR), cTokenBalance, borrowBalance, exchangeRateMantissa);\n    }\n\n    /**\n     * @dev Function to simply retrieve block number\n     *  This exists mainly for inheriting test contracts to stub this result.\n     */\n    function getBlockNumber() internal view returns (uint256) {\n        return block.number;\n    }\n\n    /**\n     * @notice Returns the current per-block borrow interest rate for this cToken\n     * @return The borrow interest rate per block, scaled by 1e18\n     */\n    function borrowRatePerBlock() external view returns (uint256) {\n        (uint256 opaqueErr, uint256 borrowRateMantissa) = interestRateModel.getBorrowRate(\n            getCashPrior(),\n            totalBorrows,\n            totalReserves\n        );\n        require(opaqueErr == 0, \"borrowRatePerBlock: interestRateModel.borrowRate failed\"); // semi-opaque\n        return borrowRateMantissa;\n    }\n\n    /**\n     * @notice Returns the current per-block supply interest rate for this cToken\n     * @return The supply interest rate per block, scaled by 1e18\n     */\n    function supplyRatePerBlock() external view returns (uint256) {\n        /* We calculate the supply rate:\n         *  underlying = totalSupply × exchangeRate\n         *  borrowsPer = totalBorrows ÷ underlying\n         *  supplyRate = borrowRate × (1-reserveFactor) × borrowsPer\n         */\n        uint256 exchangeRateMantissa = exchangeRateStored();\n\n        (uint256 e0, uint256 borrowRateMantissa) = interestRateModel.getBorrowRate(\n            getCashPrior(),\n            totalBorrows,\n            totalReserves\n        );\n        require(e0 == 0, \"supplyRatePerBlock: calculating borrowRate failed\"); // semi-opaque\n\n        (MathError e1, Exp memory underlying) = mulScalar(Exp({mantissa: exchangeRateMantissa}), totalSupply);\n        require(e1 == MathError.NO_ERROR, \"supplyRatePerBlock: calculating underlying failed\");\n\n        (MathError e2, Exp memory borrowsPer) = divScalarByExp(totalBorrows, underlying);\n        require(e2 == MathError.NO_ERROR, \"supplyRatePerBlock: calculating borrowsPer failed\");\n\n        (MathError e3, Exp memory oneMinusReserveFactor) = subExp(\n            Exp({mantissa: mantissaOne}),\n            Exp({mantissa: reserveFactorMantissa})\n        );\n        require(e3 == MathError.NO_ERROR, \"supplyRatePerBlock: calculating oneMinusReserveFactor failed\");\n\n        (MathError e4, Exp memory supplyRate) = mulExp3(\n            Exp({mantissa: borrowRateMantissa}),\n            oneMinusReserveFactor,\n            borrowsPer\n        );\n        require(e4 == MathError.NO_ERROR, \"supplyRatePerBlock: calculating supplyRate failed\");\n\n        return supplyRate.mantissa;\n    }\n\n    /**\n     * @notice Returns the current total borrows plus accrued interest\n     * @return The total borrows with interest\n     */\n    function totalBorrowsCurrent() external nonReentrant returns (uint256) {\n        require(accrueInterest() == uint256(Error.NO_ERROR), \"accrue interest failed\");\n        return totalBorrows;\n    }\n\n    /**\n     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\n     * @param account The address whose balance should be calculated after updating borrowIndex\n     * @return The calculated balance\n     */\n    function borrowBalanceCurrent(address account) external nonReentrant returns (uint256) {\n        require(accrueInterest() == uint256(Error.NO_ERROR), \"accrue interest failed\");\n        return borrowBalanceStored(account);\n    }\n\n    /**\n     * @notice Return the borrow balance of account based on stored data\n     * @param account The address whose balance should be calculated\n     * @return The calculated balance\n     */\n    function borrowBalanceStored(address account) public view returns (uint256) {\n        (MathError err, uint256 result) = borrowBalanceStoredInternal(account);\n        require(err == MathError.NO_ERROR, \"borrowBalanceStored: borrowBalanceStoredInternal failed\");\n        return result;\n    }\n\n    /**\n     * @notice Return the borrow balance of account based on stored data\n     * @param account The address whose balance should be calculated\n     * @return (error code, the calculated balance or 0 if error code is non-zero)\n     */\n    function borrowBalanceStoredInternal(address account) internal view returns (MathError, uint256) {\n        /* Note: we do not assert that the market is up to date */\n        MathError mathErr;\n        uint256 principalTimesIndex;\n        uint256 result;\n\n        /* Get borrowBalance and borrowIndex */\n        BorrowSnapshot storage borrowSnapshot = accountBorrows[account];\n\n        /* If borrowBalance = 0 then borrowIndex is likely also 0.\n         * Rather than failing the calculation with a division by 0, we immediately return 0 in this case.\n         */\n        if (borrowSnapshot.principal == 0) {\n            return (MathError.NO_ERROR, 0);\n        }\n\n        /* Calculate new borrow balance using the interest index:\n         *  recentBorrowBalance = borrower.borrowBalance * market.borrowIndex / borrower.borrowIndex\n         */\n        (mathErr, principalTimesIndex) = mulUInt(borrowSnapshot.principal, borrowIndex);\n        if (mathErr != MathError.NO_ERROR) {\n            return (mathErr, 0);\n        }\n\n        (mathErr, result) = divUInt(principalTimesIndex, borrowSnapshot.interestIndex);\n        if (mathErr != MathError.NO_ERROR) {\n            return (mathErr, 0);\n        }\n\n        return (MathError.NO_ERROR, result);\n    }\n\n    /**\n     * @notice Accrue interest then return the up-to-date exchange rate\n     * @return Calculated exchange rate scaled by 1e18\n     */\n    function exchangeRateCurrent() public nonReentrant returns (uint256) {\n        require(accrueInterest() == uint256(Error.NO_ERROR), \"accrue interest failed\");\n        return exchangeRateStored();\n    }\n\n    /**\n     * @notice Calculates the exchange rate from the underlying to the CToken\n     * @dev This function does not accrue interest before calculating the exchange rate\n     * @return Calculated exchange rate scaled by 1e18\n     */\n    function exchangeRateStored() public view returns (uint256) {\n        (MathError err, uint256 result) = exchangeRateStoredInternal();\n        require(err == MathError.NO_ERROR, \"exchangeRateStored: exchangeRateStoredInternal failed\");\n        return result;\n    }\n\n    /**\n     * @notice Calculates the exchange rate from the underlying to the CToken\n     * @dev This function does not accrue interest before calculating the exchange rate\n     * @return (error code, calculated exchange rate scaled by 1e18)\n     */\n    function exchangeRateStoredInternal() internal view returns (MathError, uint256) {\n        if (totalSupply == 0) {\n            /*\n             * If there are no tokens minted:\n             *  exchangeRate = initialExchangeRate\n             */\n            return (MathError.NO_ERROR, initialExchangeRateMantissa);\n        } else {\n            /*\n             * Otherwise:\n             *  exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply\n             */\n            uint256 totalCash = getCashPrior();\n            uint256 cashPlusBorrowsMinusReserves;\n            Exp memory exchangeRate;\n            MathError mathErr;\n\n            (mathErr, cashPlusBorrowsMinusReserves) = addThenSubUInt(totalCash, totalBorrows, totalReserves);\n            if (mathErr != MathError.NO_ERROR) {\n                return (mathErr, 0);\n            }\n\n            (mathErr, exchangeRate) = getExp(cashPlusBorrowsMinusReserves, totalSupply);\n            if (mathErr != MathError.NO_ERROR) {\n                return (mathErr, 0);\n            }\n\n            return (MathError.NO_ERROR, exchangeRate.mantissa);\n        }\n    }\n\n    /**\n     * @notice Get cash balance of this cToken in the underlying asset\n     * @return The quantity of underlying asset owned by this contract\n     */\n    function getCash() external view returns (uint256) {\n        return getCashPrior();\n    }\n\n    struct AccrueInterestLocalVars {\n        MathError mathErr;\n        uint256 opaqueErr;\n        uint256 borrowRateMantissa;\n        uint256 currentBlockNumber;\n        uint256 blockDelta;\n        Exp simpleInterestFactor;\n        uint256 interestAccumulated;\n        uint256 totalBorrowsNew;\n        uint256 totalReservesNew;\n        uint256 borrowIndexNew;\n    }\n\n    /**\n      * @notice Applies accrued interest to total borrows and reserves.\n      * @dev This calculates interest accrued from the last checkpointed block\n      *      up to the current block and writes new checkpoint to storage.\n      */\n    function accrueInterest() public returns (uint256) {\n        AccrueInterestLocalVars memory vars;\n\n        /* Calculate the current borrow interest rate */\n        (vars.opaqueErr, vars.borrowRateMantissa) = interestRateModel.getBorrowRate(\n            getCashPrior(),\n            totalBorrows,\n            totalReserves\n        );\n        require(vars.borrowRateMantissa <= borrowRateMaxMantissa, \"borrow rate is absurdly high\");\n        if (vars.opaqueErr != 0) {\n            return\n                failOpaque(\n                    Error.INTEREST_RATE_MODEL_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED,\n                    vars.opaqueErr\n                );\n        }\n\n        /* Remember the initial block number */\n        vars.currentBlockNumber = getBlockNumber();\n\n        /* Calculate the number of blocks elapsed since the last accrual */\n        (vars.mathErr, vars.blockDelta) = subUInt(vars.currentBlockNumber, accrualBlockNumber);\n        assert(vars.mathErr == MathError.NO_ERROR); // Block delta should always succeed and if it doesn't, blow up.\n\n        /*\n         * Calculate the interest accumulated into borrows and reserves and the new index:\n         *  simpleInterestFactor = borrowRate * blockDelta\n         *  interestAccumulated = simpleInterestFactor * totalBorrows\n         *  totalBorrowsNew = interestAccumulated + totalBorrows\n         *  totalReservesNew = interestAccumulated * reserveFactor + totalReserves\n         *  borrowIndexNew = simpleInterestFactor * borrowIndex + borrowIndex\n         */\n        (vars.mathErr, vars.simpleInterestFactor) = mulScalar(\n            Exp({mantissa: vars.borrowRateMantissa}),\n            vars.blockDelta\n        );\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.interestAccumulated) = mulScalarTruncate(vars.simpleInterestFactor, totalBorrows);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.totalBorrowsNew) = addUInt(vars.interestAccumulated, totalBorrows);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.totalReservesNew) = mulScalarTruncateAddUInt(\n            Exp({mantissa: reserveFactorMantissa}),\n            vars.interestAccumulated,\n            totalReserves\n        );\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.borrowIndexNew) = mulScalarTruncateAddUInt(\n            vars.simpleInterestFactor,\n            borrowIndex,\n            borrowIndex\n        );\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /* We write the previously calculated values into storage */\n        accrualBlockNumber = vars.currentBlockNumber;\n        borrowIndex = vars.borrowIndexNew;\n        totalBorrows = vars.totalBorrowsNew;\n        totalReserves = vars.totalReservesNew;\n\n        /* We emit an AccrueInterest event */\n        emit AccrueInterest(vars.interestAccumulated, vars.borrowIndexNew, totalBorrows);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Sender supplies assets into the market and receives cTokens in exchange\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param mintAmount The amount of the underlying asset to supply\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function mintInternal(uint256 mintAmount) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted borrow failed\n            return fail(Error(error), FailureInfo.MINT_ACCRUE_INTEREST_FAILED);\n        }\n        // mintFresh emits the actual Mint event if successful and logs on errors, so we don't need to\n        return mintFresh(msg.sender, mintAmount);\n    }\n\n    struct MintLocalVars {\n        Error err;\n        MathError mathErr;\n        uint256 exchangeRateMantissa;\n        uint256 mintTokens;\n        uint256 totalSupplyNew;\n        uint256 accountTokensNew;\n    }\n\n    /**\n     * @notice User supplies assets into the market and receives cTokens in exchange\n     * @dev Assumes interest has already been accrued up to the current block\n     * @param minter The address of the account which is supplying the assets\n     * @param mintAmount The amount of the underlying asset to supply\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function mintFresh(address minter, uint256 mintAmount) internal returns (uint256) {\n        /* Fail if mint not allowed */\n        uint256 allowed = comptroller.mintAllowed(address(this), minter, mintAmount);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.MINT_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Verify market's block number equals current block number */\n        if (accrualBlockNumber != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.MINT_FRESHNESS_CHECK);\n        }\n\n        MintLocalVars memory vars;\n\n        /* Fail if checkTransferIn fails */\n        vars.err = checkTransferIn(minter, mintAmount);\n        if (vars.err != Error.NO_ERROR) {\n            return fail(vars.err, FailureInfo.MINT_TRANSFER_IN_NOT_POSSIBLE);\n        }\n\n        /*\n         * We get the current exchange rate and calculate the number of cTokens to be minted:\n         *  mintTokens = mintAmount / exchangeRate\n         */\n        (vars.mathErr, vars.exchangeRateMantissa) = exchangeRateStoredInternal();\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return failOpaque(Error.MATH_ERROR, FailureInfo.MINT_EXCHANGE_RATE_READ_FAILED, uint256(vars.mathErr));\n        }\n\n        (vars.mathErr, vars.mintTokens) = divScalarByExpTruncate(\n            mintAmount,\n            Exp({mantissa: vars.exchangeRateMantissa})\n        );\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return failOpaque(Error.MATH_ERROR, FailureInfo.MINT_EXCHANGE_CALCULATION_FAILED, uint256(vars.mathErr));\n        }\n\n        /*\n         * We calculate the new total supply of cTokens and minter token balance, checking for overflow:\n         *  totalSupplyNew = totalSupply + mintTokens\n         *  accountTokensNew = accountTokens[minter] + mintTokens\n         */\n        (vars.mathErr, vars.totalSupplyNew) = addUInt(totalSupply, vars.mintTokens);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.accountTokensNew) = addUInt(accountTokens[minter], vars.mintTokens);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We call doTransferIn for the minter and the mintAmount\n         *  Note: The cToken must handle variations between ERC-20 and ETH underlying.\n         *  On success, the cToken holds an additional mintAmount of cash.\n         *  If doTransferIn fails despite the fact we checked pre-conditions,\n         *   we revert because we can't be sure if side effects occurred.\n         */\n        vars.err = doTransferIn(minter, mintAmount);\n        if (vars.err != Error.NO_ERROR) {\n            return fail(vars.err, FailureInfo.MINT_TRANSFER_IN_FAILED);\n        }\n\n        /* We write previously calculated values into storage */\n        totalSupply = vars.totalSupplyNew;\n        accountTokens[minter] = vars.accountTokensNew;\n\n        /* We emit a Mint event, and a Transfer event */\n        emit Mint(minter, mintAmount, vars.mintTokens);\n        emit Transfer(address(this), minter, vars.mintTokens);\n\n        /* We call the defense hook */\n        comptroller.mintVerify(address(this), minter, mintAmount, vars.mintTokens);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Sender redeems cTokens in exchange for the underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemTokens The number of cTokens to redeem into underlying\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function redeemInternal(uint256 redeemTokens) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted redeem failed\n            return fail(Error(error), FailureInfo.REDEEM_ACCRUE_INTEREST_FAILED);\n        }\n        // redeemFresh emits redeem-specific logs on errors, so we don't need to\n        return redeemFresh(msg.sender, redeemTokens, 0);\n    }\n\n    /**\n     * @notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n     * @dev Accrues interest whether or not the operation succeeds, unless reverted\n     * @param redeemAmount The amount of underlying to redeem\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function redeemUnderlyingInternal(uint256 redeemAmount) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted redeem failed\n            return fail(Error(error), FailureInfo.REDEEM_ACCRUE_INTEREST_FAILED);\n        }\n        // redeemFresh emits redeem-specific logs on errors, so we don't need to\n        return redeemFresh(msg.sender, 0, redeemAmount);\n    }\n\n    struct RedeemLocalVars {\n        Error err;\n        MathError mathErr;\n        uint256 exchangeRateMantissa;\n        uint256 redeemTokens;\n        uint256 redeemAmount;\n        uint256 totalSupplyNew;\n        uint256 accountTokensNew;\n    }\n\n    /**\n     * @notice User redeems cTokens in exchange for the underlying asset\n     * @dev Assumes interest has already been accrued up to the current block\n     * @param redeemer The address of the account which is redeeming the tokens\n     * @param redeemTokensIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n     * @param redeemAmountIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function redeemFresh(address payable redeemer, uint256 redeemTokensIn, uint256 redeemAmountIn)\n        internal\n        returns (uint256)\n    {\n        require(redeemTokensIn == 0 || redeemAmountIn == 0, \"one of redeemTokensIn or redeemAmountIn must be zero\");\n\n        RedeemLocalVars memory vars;\n\n        /* exchangeRate = invoke Exchange Rate Stored() */\n        (vars.mathErr, vars.exchangeRateMantissa) = exchangeRateStoredInternal();\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return failOpaque(Error.MATH_ERROR, FailureInfo.REDEEM_EXCHANGE_RATE_READ_FAILED, uint256(vars.mathErr));\n        }\n\n        /* If redeemTokensIn > 0: */\n        if (redeemTokensIn > 0) {\n            /*\n             * We calculate the exchange rate and the amount of underlying to be redeemed:\n             *  redeemTokens = redeemTokensIn\n             *  redeemAmount = redeemTokensIn x exchangeRateCurrent\n             */\n            vars.redeemTokens = redeemTokensIn;\n\n            (vars.mathErr, vars.redeemAmount) = mulScalarTruncate(\n                Exp({mantissa: vars.exchangeRateMantissa}),\n                redeemTokensIn\n            );\n            if (vars.mathErr != MathError.NO_ERROR) {\n                return\n                    failOpaque(\n                        Error.MATH_ERROR,\n                        FailureInfo.REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED,\n                        uint256(vars.mathErr)\n                    );\n            }\n        } else {\n            /*\n             * We get the current exchange rate and calculate the amount to be redeemed:\n             *  redeemTokens = redeemAmountIn / exchangeRate\n             *  redeemAmount = redeemAmountIn\n             */\n\n            (vars.mathErr, vars.redeemTokens) = divScalarByExpTruncate(\n                redeemAmountIn,\n                Exp({mantissa: vars.exchangeRateMantissa})\n            );\n            if (vars.mathErr != MathError.NO_ERROR) {\n                return\n                    failOpaque(\n                        Error.MATH_ERROR,\n                        FailureInfo.REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED,\n                        uint256(vars.mathErr)\n                    );\n            }\n\n            vars.redeemAmount = redeemAmountIn;\n        }\n\n        /* Fail if redeem not allowed */\n        uint256 allowed = comptroller.redeemAllowed(address(this), redeemer, vars.redeemTokens);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.REDEEM_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Verify market's block number equals current block number */\n        if (accrualBlockNumber != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.REDEEM_FRESHNESS_CHECK);\n        }\n\n        /*\n         * We calculate the new total supply and redeemer balance, checking for underflow:\n         *  totalSupplyNew = totalSupply - redeemTokens\n         *  accountTokensNew = accountTokens[redeemer] - redeemTokens\n         */\n        (vars.mathErr, vars.totalSupplyNew) = subUInt(totalSupply, vars.redeemTokens);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.accountTokensNew) = subUInt(accountTokens[redeemer], vars.redeemTokens);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /* Fail gracefully if protocol has insufficient cash */\n        if (getCashPrior() < vars.redeemAmount) {\n            return fail(Error.TOKEN_INSUFFICIENT_CASH, FailureInfo.REDEEM_TRANSFER_OUT_NOT_POSSIBLE);\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We invoke doTransferOut for the redeemer and the redeemAmount.\n         *  Note: The cToken must handle variations between ERC-20 and ETH underlying.\n         *  On success, the cToken has redeemAmount less of cash.\n         *  If doTransferOut fails despite the fact we checked pre-conditions,\n         *   we revert because we can't be sure if side effects occurred.\n         */\n        vars.err = doTransferOut(redeemer, vars.redeemAmount);\n        require(vars.err == Error.NO_ERROR, \"redeem transfer out failed\");\n\n        /* We write previously calculated values into storage */\n        totalSupply = vars.totalSupplyNew;\n        accountTokens[redeemer] = vars.accountTokensNew;\n\n        /* We emit a Transfer event, and a Redeem event */\n        emit Transfer(redeemer, address(this), vars.redeemTokens);\n        emit Redeem(redeemer, vars.redeemAmount, vars.redeemTokens);\n\n        /* We call the defense hook */\n        comptroller.redeemVerify(address(this), redeemer, vars.redeemAmount, vars.redeemTokens);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n      * @notice Sender borrows assets from the protocol to their own address\n      * @param borrowAmount The amount of the underlying asset to borrow\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function borrowInternal(uint256 borrowAmount) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted borrow failed\n            return fail(Error(error), FailureInfo.BORROW_ACCRUE_INTEREST_FAILED);\n        }\n        // borrowFresh emits borrow-specific logs on errors, so we don't need to\n        return borrowFresh(msg.sender, borrowAmount);\n    }\n\n    struct BorrowLocalVars {\n        Error err;\n        MathError mathErr;\n        uint256 accountBorrows;\n        uint256 accountBorrowsNew;\n        uint256 totalBorrowsNew;\n    }\n\n    /**\n      * @notice Users borrow assets from the protocol to their own address\n      * @param borrowAmount The amount of the underlying asset to borrow\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function borrowFresh(address payable borrower, uint256 borrowAmount) internal returns (uint256) {\n        /* Fail if borrow not allowed */\n        uint256 allowed = comptroller.borrowAllowed(address(this), borrower, borrowAmount);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.BORROW_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Verify market's block number equals current block number */\n        if (accrualBlockNumber != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.BORROW_FRESHNESS_CHECK);\n        }\n\n        /* Fail gracefully if protocol has insufficient underlying cash */\n        if (getCashPrior() < borrowAmount) {\n            return fail(Error.TOKEN_INSUFFICIENT_CASH, FailureInfo.BORROW_CASH_NOT_AVAILABLE);\n        }\n\n        BorrowLocalVars memory vars;\n\n        /*\n         * We calculate the new borrower and total borrow balances, failing on overflow:\n         *  accountBorrowsNew = accountBorrows + borrowAmount\n         *  totalBorrowsNew = totalBorrows + borrowAmount\n         */\n        (vars.mathErr, vars.accountBorrows) = borrowBalanceStoredInternal(borrower);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.accountBorrowsNew) = addUInt(vars.accountBorrows, borrowAmount);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.totalBorrowsNew) = addUInt(totalBorrows, borrowAmount);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We invoke doTransferOut for the borrower and the borrowAmount.\n         *  Note: The cToken must handle variations between ERC-20 and ETH underlying.\n         *  On success, the cToken borrowAmount less of cash.\n         *  If doTransferOut fails despite the fact we checked pre-conditions,\n         *   we revert because we can't be sure if side effects occurred.\n         */\n        vars.err = doTransferOut(borrower, borrowAmount);\n        require(vars.err == Error.NO_ERROR, \"borrow transfer out failed\");\n\n        /* We write the previously calculated values into storage */\n        accountBorrows[borrower].principal = vars.accountBorrowsNew;\n        accountBorrows[borrower].interestIndex = borrowIndex;\n        totalBorrows = vars.totalBorrowsNew;\n\n        /* We emit a Borrow event */\n        emit Borrow(borrower, borrowAmount, vars.accountBorrowsNew, vars.totalBorrowsNew);\n\n        /* We call the defense hook */\n        comptroller.borrowVerify(address(this), borrower, borrowAmount);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Sender repays their own borrow\n     * @param repayAmount The amount to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function repayBorrowInternal(uint256 repayAmount) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted borrow failed\n            return fail(Error(error), FailureInfo.REPAY_BORROW_ACCRUE_INTEREST_FAILED);\n        }\n        // repayBorrowFresh emits repay-borrow-specific logs on errors, so we don't need to\n        return repayBorrowFresh(msg.sender, msg.sender, repayAmount);\n    }\n\n    /**\n     * @notice Sender repays a borrow belonging to borrower\n     * @param borrower the account with the debt being payed off\n     * @param repayAmount The amount to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function repayBorrowBehalfInternal(address borrower, uint256 repayAmount) internal nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted borrow failed\n            return fail(Error(error), FailureInfo.REPAY_BEHALF_ACCRUE_INTEREST_FAILED);\n        }\n        // repayBorrowFresh emits repay-borrow-specific logs on errors, so we don't need to\n        return repayBorrowFresh(msg.sender, borrower, repayAmount);\n    }\n\n    struct RepayBorrowLocalVars {\n        Error err;\n        MathError mathErr;\n        uint256 repayAmount;\n        uint256 borrowerIndex;\n        uint256 accountBorrows;\n        uint256 accountBorrowsNew;\n        uint256 totalBorrowsNew;\n    }\n\n    /**\n     * @notice Borrows are repaid by another user (possibly the borrower).\n     * @param payer the account paying off the borrow\n     * @param borrower the account with the debt being payed off\n     * @param repayAmount the amount of undelrying tokens being returned\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function repayBorrowFresh(address payer, address borrower, uint256 repayAmount) internal returns (uint256) {\n        /* Fail if repayBorrow not allowed */\n        uint256 allowed = comptroller.repayBorrowAllowed(address(this), payer, borrower, repayAmount);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.REPAY_BORROW_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Verify market's block number equals current block number */\n        if (accrualBlockNumber != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.REPAY_BORROW_FRESHNESS_CHECK);\n        }\n\n        RepayBorrowLocalVars memory vars;\n\n        /* We remember the original borrowerIndex for verification purposes */\n        vars.borrowerIndex = accountBorrows[borrower].interestIndex;\n\n        /* We fetch the amount the borrower owes, with accumulated interest */\n        (vars.mathErr, vars.accountBorrows) = borrowBalanceStoredInternal(borrower);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /* If repayAmount == -1, repayAmount = accountBorrows */\n        if (repayAmount == uint256(-1)) {\n            vars.repayAmount = vars.accountBorrows;\n        } else {\n            vars.repayAmount = repayAmount;\n        }\n\n        /* Fail if checkTransferIn fails */\n        vars.err = checkTransferIn(payer, vars.repayAmount);\n        if (vars.err != Error.NO_ERROR) {\n            return fail(vars.err, FailureInfo.REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE);\n        }\n\n        /*\n         * We calculate the new borrower and total borrow balances, failing on underflow:\n         *  accountBorrowsNew = accountBorrows - repayAmount\n         *  totalBorrowsNew = totalBorrows - repayAmount\n         */\n        (vars.mathErr, vars.accountBorrowsNew) = subUInt(vars.accountBorrows, vars.repayAmount);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        (vars.mathErr, vars.totalBorrowsNew) = subUInt(totalBorrows, vars.repayAmount);\n        if (vars.mathErr != MathError.NO_ERROR) {\n            return\n                failOpaque(\n                    Error.MATH_ERROR,\n                    FailureInfo.REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,\n                    uint256(vars.mathErr)\n                );\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /*\n         * We call doTransferIn for the payer and the repayAmount\n         *  Note: The cToken must handle variations between ERC-20 and ETH underlying.\n         *  On success, the cToken holds an additional repayAmount of cash.\n         *  If doTransferIn fails despite the fact we checked pre-conditions,\n         *   we revert because we can't be sure if side effects occurred.\n         */\n        vars.err = doTransferIn(payer, vars.repayAmount);\n        require(vars.err == Error.NO_ERROR, \"repay borrow transfer in failed\");\n\n        /* We write the previously calculated values into storage */\n        accountBorrows[borrower].principal = vars.accountBorrowsNew;\n        accountBorrows[borrower].interestIndex = borrowIndex;\n        totalBorrows = vars.totalBorrowsNew;\n\n        /* We emit a RepayBorrow event */\n        emit RepayBorrow(payer, borrower, vars.repayAmount, vars.accountBorrowsNew, vars.totalBorrowsNew);\n\n        /* We call the defense hook */\n        comptroller.repayBorrowVerify(address(this), payer, borrower, vars.repayAmount, vars.borrowerIndex);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice The sender liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param borrower The borrower of this cToken to be liquidated\n     * @param cTokenCollateral The market in which to seize collateral from the borrower\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function liquidateBorrowInternal(address borrower, uint256 repayAmount, CToken cTokenCollateral)\n        internal\n        nonReentrant\n        returns (uint256)\n    {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\n            return fail(Error(error), FailureInfo.LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED);\n        }\n\n        error = cTokenCollateral.accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but we still want to log the fact that an attempted liquidation failed\n            return fail(Error(error), FailureInfo.LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED);\n        }\n\n        // liquidateBorrowFresh emits borrow-specific logs on errors, so we don't need to\n        return liquidateBorrowFresh(msg.sender, borrower, repayAmount, cTokenCollateral);\n    }\n\n    /**\n     * @notice The liquidator liquidates the borrowers collateral.\n     *  The collateral seized is transferred to the liquidator.\n     * @param borrower The borrower of this cToken to be liquidated\n     * @param liquidator The address repaying the borrow and seizing collateral\n     * @param cTokenCollateral The market in which to seize collateral from the borrower\n     * @param repayAmount The amount of the underlying borrowed asset to repay\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function liquidateBorrowFresh(address liquidator, address borrower, uint256 repayAmount, CToken cTokenCollateral)\n        internal\n        returns (uint256)\n    {\n        /* Fail if liquidate not allowed */\n        uint256 allowed = comptroller.liquidateBorrowAllowed(\n            address(this),\n            address(cTokenCollateral),\n            liquidator,\n            borrower,\n            repayAmount\n        );\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.LIQUIDATE_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Verify market's block number equals current block number */\n        if (accrualBlockNumber != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.LIQUIDATE_FRESHNESS_CHECK);\n        }\n\n        /* Verify cTokenCollateral market's block number equals current block number */\n        if (cTokenCollateral.accrualBlockNumber() != getBlockNumber()) {\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.LIQUIDATE_COLLATERAL_FRESHNESS_CHECK);\n        }\n\n        /* Fail if borrower = liquidator */\n        if (borrower == liquidator) {\n            return fail(Error.INVALID_ACCOUNT_PAIR, FailureInfo.LIQUIDATE_LIQUIDATOR_IS_BORROWER);\n        }\n\n        /* Fail if repayAmount = 0 */\n        if (repayAmount == 0) {\n            return fail(Error.INVALID_CLOSE_AMOUNT_REQUESTED, FailureInfo.LIQUIDATE_CLOSE_AMOUNT_IS_ZERO);\n        }\n\n        /* Fail if repayAmount = -1 */\n        if (repayAmount == uint256(-1)) {\n            return fail(Error.INVALID_CLOSE_AMOUNT_REQUESTED, FailureInfo.LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX);\n        }\n\n        /* We calculate the number of collateral tokens that will be seized */\n        (uint256 amountSeizeError, uint256 seizeTokens) = comptroller.liquidateCalculateSeizeTokens(\n            address(this),\n            address(cTokenCollateral),\n            repayAmount\n        );\n        if (amountSeizeError != 0) {\n            return\n                failOpaque(\n                    Error.COMPTROLLER_CALCULATION_ERROR,\n                    FailureInfo.LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED,\n                    amountSeizeError\n                );\n        }\n\n        /* Fail if seizeTokens > borrower collateral token balance */\n        if (seizeTokens > cTokenCollateral.balanceOf(borrower)) {\n            return fail(Error.TOKEN_INSUFFICIENT_BALANCE, FailureInfo.LIQUIDATE_SEIZE_TOO_MUCH);\n        }\n\n        /* Fail if repayBorrow fails */\n        uint256 repayBorrowError = repayBorrowFresh(liquidator, borrower, repayAmount);\n        if (repayBorrowError != uint256(Error.NO_ERROR)) {\n            return fail(Error(repayBorrowError), FailureInfo.LIQUIDATE_REPAY_BORROW_FRESH_FAILED);\n        }\n\n        /* Revert if seize tokens fails (since we cannot be sure of side effects) */\n        uint256 seizeError = cTokenCollateral.seize(liquidator, borrower, seizeTokens);\n        require(seizeError == uint256(Error.NO_ERROR), \"token seizure failed\");\n\n        /* We emit a LiquidateBorrow event */\n        emit LiquidateBorrow(liquidator, borrower, repayAmount, address(cTokenCollateral), seizeTokens);\n\n        /* We call the defense hook */\n        comptroller.liquidateBorrowVerify(\n            address(this),\n            address(cTokenCollateral),\n            liquidator,\n            borrower,\n            repayAmount,\n            seizeTokens\n        );\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Transfers collateral tokens (this market) to the liquidator.\n     * @dev Will fail unless called by another cToken during the process of liquidation.\n     *  Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.\n     * @param liquidator The account receiving seized collateral\n     * @param borrower The account having collateral seized\n     * @param seizeTokens The number of cTokens to seize\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function seize(address liquidator, address borrower, uint256 seizeTokens) external nonReentrant returns (uint256) {\n        /* Fail if seize not allowed */\n        uint256 allowed = comptroller.seizeAllowed(address(this), msg.sender, liquidator, borrower, seizeTokens);\n        if (allowed != 0) {\n            return failOpaque(Error.COMPTROLLER_REJECTION, FailureInfo.LIQUIDATE_SEIZE_COMPTROLLER_REJECTION, allowed);\n        }\n\n        /* Fail if borrower = liquidator */\n        if (borrower == liquidator) {\n            return fail(Error.INVALID_ACCOUNT_PAIR, FailureInfo.LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER);\n        }\n\n        MathError mathErr;\n        uint256 borrowerTokensNew;\n        uint256 liquidatorTokensNew;\n\n        /*\n         * We calculate the new borrower and liquidator token balances, failing on underflow/overflow:\n         *  borrowerTokensNew = accountTokens[borrower] - seizeTokens\n         *  liquidatorTokensNew = accountTokens[liquidator] + seizeTokens\n         */\n        (mathErr, borrowerTokensNew) = subUInt(accountTokens[borrower], seizeTokens);\n        if (mathErr != MathError.NO_ERROR) {\n            return failOpaque(Error.MATH_ERROR, FailureInfo.LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED, uint256(mathErr));\n        }\n\n        (mathErr, liquidatorTokensNew) = addUInt(accountTokens[liquidator], seizeTokens);\n        if (mathErr != MathError.NO_ERROR) {\n            return failOpaque(Error.MATH_ERROR, FailureInfo.LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED, uint256(mathErr));\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        /* We write the previously calculated values into storage */\n        accountTokens[borrower] = borrowerTokensNew;\n        accountTokens[liquidator] = liquidatorTokensNew;\n\n        /* Emit a Transfer event */\n        emit Transfer(borrower, liquidator, seizeTokens);\n\n        /* We call the defense hook */\n        comptroller.seizeVerify(address(this), msg.sender, liquidator, borrower, seizeTokens);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /*** Admin Functions ***/\n\n    /**\n      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n      * @param newPendingAdmin New pending admin.\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      *\n      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?\n      */\n    function _setPendingAdmin(address payable newPendingAdmin) external returns (uint256) {\n        // Check caller = admin\n        if (msg.sender != admin) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.SET_PENDING_ADMIN_OWNER_CHECK);\n        }\n\n        // Save current value, if any, for inclusion in log\n        address oldPendingAdmin = pendingAdmin;\n\n        // Store pendingAdmin with value newPendingAdmin\n        pendingAdmin = newPendingAdmin;\n\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\n      * @dev Admin function for pending admin to accept role and update admin\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function _acceptAdmin() external returns (uint256) {\n        // Check caller is pendingAdmin and pendingAdmin ≠ address(0)\n        if (msg.sender != pendingAdmin || msg.sender == address(0)) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_ADMIN_PENDING_ADMIN_CHECK);\n        }\n\n        // Save current values for inclusion in log\n        address oldAdmin = admin;\n        address oldPendingAdmin = pendingAdmin;\n\n        // Store admin with value pendingAdmin\n        admin = pendingAdmin;\n\n        // Clear the pending value\n        pendingAdmin = address(0);\n\n        emit NewAdmin(oldAdmin, admin);\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n      * @notice Sets a new comptroller for the market\n      * @dev Admin function to set a new comptroller\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function _setComptroller(ComptrollerInterface newComptroller) public returns (uint256) {\n        // Check caller is admin\n        if (msg.sender != admin) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.SET_COMPTROLLER_OWNER_CHECK);\n        }\n\n        ComptrollerInterface oldComptroller = comptroller;\n        // Ensure invoke comptroller.isComptroller() returns true\n        require(newComptroller.isComptroller(), \"marker method returned false\");\n\n        // Set market's comptroller to newComptroller\n        comptroller = newComptroller;\n\n        // Emit NewComptroller(oldComptroller, newComptroller)\n        emit NewComptroller(oldComptroller, newComptroller);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n      * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\n      * @dev Admin function to accrue interest and set a new reserve factor\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function _setReserveFactor(uint256 newReserveFactorMantissa) external nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but on top of that we want to log the fact that an attempted reserve factor change failed.\n            return fail(Error(error), FailureInfo.SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED);\n        }\n        // _setReserveFactorFresh emits reserve-factor-specific logs on errors, so we don't need to.\n        return _setReserveFactorFresh(newReserveFactorMantissa);\n    }\n\n    /**\n      * @notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\n      * @dev Admin function to set a new reserve factor\n      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      */\n    function _setReserveFactorFresh(uint256 newReserveFactorMantissa) internal returns (uint256) {\n        // Check caller is admin\n        if (msg.sender != admin) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.SET_RESERVE_FACTOR_ADMIN_CHECK);\n        }\n\n        // Verify market's block number equals current block number\n        if (accrualBlockNumber != getBlockNumber()) {\n            // TODO: static_assert + no error code?\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.SET_RESERVE_FACTOR_FRESH_CHECK);\n        }\n\n        // Check newReserveFactor ≤ maxReserveFactor\n        if (newReserveFactorMantissa > reserveFactorMaxMantissa) {\n            return fail(Error.BAD_INPUT, FailureInfo.SET_RESERVE_FACTOR_BOUNDS_CHECK);\n        }\n\n        uint256 oldReserveFactorMantissa = reserveFactorMantissa;\n        reserveFactorMantissa = newReserveFactorMantissa;\n\n        emit NewReserveFactor(oldReserveFactorMantissa, newReserveFactorMantissa);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice Accrues interest and reduces reserves by transferring to admin\n     * @param reduceAmount Amount of reduction to reserves\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function _reduceReserves(uint256 reduceAmount) external nonReentrant returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but on top of that we want to log the fact that an attempted reduce reserves failed.\n            return fail(Error(error), FailureInfo.REDUCE_RESERVES_ACCRUE_INTEREST_FAILED);\n        }\n        // _reduceReservesFresh emits reserve-reduction-specific logs on errors, so we don't need to.\n        return _reduceReservesFresh(reduceAmount);\n    }\n\n    /**\n     * @notice Reduces reserves by transferring to admin\n     * @dev Requires fresh interest accrual\n     * @param reduceAmount Amount of reduction to reserves\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function _reduceReservesFresh(uint256 reduceAmount) internal returns (uint256) {\n        Error err;\n        // totalReserves - reduceAmount\n        uint256 totalReservesNew;\n\n        // Check caller is admin\n        if (msg.sender != admin) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.REDUCE_RESERVES_ADMIN_CHECK);\n        }\n\n        // We fail gracefully unless market's block number equals current block number\n        if (accrualBlockNumber != getBlockNumber()) {\n            // TODO: static_assert + no error code?\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.REDUCE_RESERVES_FRESH_CHECK);\n        }\n\n        // Fail gracefully if protocol has insufficient underlying cash\n        if (getCashPrior() < reduceAmount) {\n            return fail(Error.TOKEN_INSUFFICIENT_CASH, FailureInfo.REDUCE_RESERVES_CASH_NOT_AVAILABLE);\n        }\n\n        // Check reduceAmount ≤ reserves[n] (totalReserves)\n        // TODO: I'm following the spec literally here but I think we should we just use SafeMath instead and fail on an error (which would be underflow)\n        if (reduceAmount > totalReserves) {\n            return fail(Error.BAD_INPUT, FailureInfo.REDUCE_RESERVES_VALIDATION);\n        }\n\n        /////////////////////////\n        // EFFECTS & INTERACTIONS\n        // (No safe failures beyond this point)\n\n        totalReservesNew = totalReserves - reduceAmount;\n        // We checked reduceAmount <= totalReserves above, so this should never revert.\n        require(totalReservesNew <= totalReserves, \"reduce reserves unexpected underflow\");\n\n        // Store reserves[n+1] = reserves[n] - reduceAmount\n        totalReserves = totalReservesNew;\n\n        // invoke doTransferOut(reduceAmount, admin)\n        err = doTransferOut(admin, reduceAmount);\n        // we revert on the failure of this command\n        require(err == Error.NO_ERROR, \"reduce reserves transfer out failed\");\n\n        emit ReservesReduced(admin, reduceAmount, totalReservesNew);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /**\n     * @notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\n     * @dev Admin function to accrue interest and update the interest rate model\n     * @param newInterestRateModel the new interest rate model to use\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint256) {\n        uint256 error = accrueInterest();\n        if (error != uint256(Error.NO_ERROR)) {\n            // accrueInterest emits logs on errors, but on top of that we want to log the fact that an attempted change of interest rate model failed\n            return fail(Error(error), FailureInfo.SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED);\n        }\n        // _setInterestRateModelFresh emits interest-rate-model-update-specific logs on errors, so we don't need to.\n        return _setInterestRateModelFresh(newInterestRateModel);\n    }\n\n    /**\n     * @notice updates the interest rate model (*requires fresh interest accrual)\n     * @dev Admin function to update the interest rate model\n     * @param newInterestRateModel the new interest rate model to use\n     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n     */\n    function _setInterestRateModelFresh(InterestRateModel newInterestRateModel) internal returns (uint256) {\n        // Used to store old model for use in the event that is emitted on success\n        InterestRateModel oldInterestRateModel;\n\n        // Check caller is admin\n        if (msg.sender != admin) {\n            return fail(Error.UNAUTHORIZED, FailureInfo.SET_INTEREST_RATE_MODEL_OWNER_CHECK);\n        }\n\n        // We fail gracefully unless market's block number equals current block number\n        if (accrualBlockNumber != getBlockNumber()) {\n            // TODO: static_assert + no error code?\n            return fail(Error.MARKET_NOT_FRESH, FailureInfo.SET_INTEREST_RATE_MODEL_FRESH_CHECK);\n        }\n\n        // Track the market's current interest rate model\n        oldInterestRateModel = interestRateModel;\n\n        // Ensure invoke newInterestRateModel.isInterestRateModel() returns true\n        require(newInterestRateModel.isInterestRateModel(), \"marker method returned false\");\n\n        // Set the interest rate model to newInterestRateModel\n        interestRateModel = newInterestRateModel;\n\n        // Emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel)\n        emit NewMarketInterestRateModel(oldInterestRateModel, newInterestRateModel);\n\n        return uint256(Error.NO_ERROR);\n    }\n\n    /*** Safe Token ***/\n\n    /**\n     * @notice Gets balance of this contract in terms of the underlying\n     * @dev This excludes the value of the current message, if any\n     * @return The quantity of underlying owned by this contract\n     */\n    function getCashPrior() internal view returns (uint256);\n\n    /**\n     * @dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     *      whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.\n     */\n    function checkTransferIn(address from, uint256 amount) internal view returns (Error);\n\n    /**\n     * @dev Performs a transfer in, ideally returning an explanatory error code upon failure rather than reverting.\n     *  If caller has not called `checkTransferIn`, this may revert due to insufficient balance or insufficient allowance.\n     *  If caller has called `checkTransferIn` successfully, this should not revert in normal conditions.\n     */\n    function doTransferIn(address from, uint256 amount) internal returns (Error);\n\n    /**\n     * @dev Performs a transfer out, ideally returning an explanatory error code upon failure tather than reverting.\n     *  If caller has not called checked protocol's balance, may revert due to insufficient cash held in the contract.\n     *  If caller has checked protocol's balance, and verified it is >= amount, this should not revert in normal conditions.\n     */\n    function doTransferOut(address payable to, uint256 amount) internal returns (Error);\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol",
    "exportedSymbols": {
      "CToken": [
        4422
      ]
    },
    "id": 4423,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 702,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20Interface.sol",
        "file": "./EIP20Interface.sol",
        "id": 703,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 4886,
        "src": "25:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol",
        "file": "./Exponential.sol",
        "id": 704,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5799,
        "src": "56:27:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol",
        "file": "./ErrorReporter.sol",
        "id": 705,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5208,
        "src": "84:29:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 706,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5852,
        "src": "114:31:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ComptrollerInterface.sol",
        "file": "./ComptrollerInterface.sol",
        "id": 707,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 4817,
        "src": "146:36:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/InterestRateModel.sol",
        "file": "./InterestRateModel.sol",
        "id": 708,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5820,
        "src": "183:33:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 709,
              "name": "EIP20Interface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4885,
              "src": "339:14:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                "typeString": "contract EIP20Interface"
              }
            },
            "id": 710,
            "nodeType": "InheritanceSpecifier",
            "src": "339:14:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 711,
              "name": "Exponential",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5798,
              "src": "355:11:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Exponential_$5798",
                "typeString": "contract Exponential"
              }
            },
            "id": 712,
            "nodeType": "InheritanceSpecifier",
            "src": "355:11:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 713,
              "name": "TokenErrorReporter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5207,
              "src": "368:18:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenErrorReporter_$5207",
                "typeString": "contract TokenErrorReporter"
              }
            },
            "id": 714,
            "nodeType": "InheritanceSpecifier",
            "src": "368:18:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 715,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5851,
              "src": "388:15:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$5851",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 716,
            "nodeType": "InheritanceSpecifier",
            "src": "388:15:2"
          }
        ],
        "contractDependencies": [
          4607,
          4885,
          5207,
          5798,
          5851
        ],
        "contractKind": "contract",
        "documentation": "@title Compound's CToken Contract\n@notice Abstract base for CTokens\n@author Compound",
        "fullyImplemented": false,
        "id": 4422,
        "linearizedBaseContracts": [
          4422,
          5851,
          5207,
          5798,
          4607,
          4885
        ],
        "name": "CToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 719,
            "name": "isCToken",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "499:36:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 717,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "499:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 718,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "531:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 721,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "606:18:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 720,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "606:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 723,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "697:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 722,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "697:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 725,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "792:23:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 724,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "792:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 728,
            "name": "borrowRateMaxMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "915:45:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 726,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "915:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "35653134",
              "id": 727,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "956:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_500000000000000_by_1",
                "typeString": "int_const 500000000000000"
              },
              "value": "5e14"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 731,
            "name": "reserveFactorMaxMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1062:48:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 729,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1062:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 730,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1106:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 733,
            "name": "admin",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1180:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 732,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1180:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 735,
            "name": "pendingAdmin",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1286:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 734,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1286:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 737,
            "name": "comptroller",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1407:39:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
              "typeString": "contract ComptrollerInterface"
            },
            "typeName": {
              "contractScope": null,
              "id": 736,
              "name": "ComptrollerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4816,
              "src": "1407:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                "typeString": "contract ComptrollerInterface"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 739,
            "name": "interestRateModel",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1543:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_InterestRateModel_$5819",
              "typeString": "contract InterestRateModel"
            },
            "typeName": {
              "contractScope": null,
              "id": 738,
              "name": "InterestRateModel",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5819,
              "src": "1543:17:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                "typeString": "contract InterestRateModel"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 741,
            "name": "initialExchangeRateMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1709:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 740,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1709:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 743,
            "name": "reserveFactorMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1843:36:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 742,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1843:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 745,
            "name": "accrualBlockNumber",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1964:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 744,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1964:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 747,
            "name": "borrowIndex",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2104:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 746,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2104:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 749,
            "name": "totalBorrows",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2237:27:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 748,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2237:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 751,
            "name": "totalReserves",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2365:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 750,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2365:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 753,
            "name": "totalSupply",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2469:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 752,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2469:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 757,
            "name": "accountTokens",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2584:41:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 756,
              "keyType": {
                "id": 754,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2592:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2584:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 755,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2603:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 763,
            "name": "transferAllowances",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2715:66:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 762,
              "keyType": {
                "id": 758,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2723:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2715:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 761,
                "keyType": {
                  "id": 759,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2742:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2734:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 760,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2753:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.BorrowSnapshot",
            "id": 768,
            "members": [
              {
                "constant": false,
                "id": 765,
                "name": "principal",
                "nodeType": "VariableDeclaration",
                "scope": 768,
                "src": "3105:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 764,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3105:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 767,
                "name": "interestIndex",
                "nodeType": "VariableDeclaration",
                "scope": 768,
                "src": "3132:21:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 766,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3132:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BorrowSnapshot",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "3073:87:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 772,
            "name": "accountBorrows",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "3257:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
              "typeString": "mapping(address => struct CToken.BorrowSnapshot)"
            },
            "typeName": {
              "id": 771,
              "keyType": {
                "id": 769,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3265:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3257:34:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                "typeString": "mapping(address => struct CToken.BorrowSnapshot)"
              },
              "valueType": {
                "contractScope": null,
                "id": 770,
                "name": "BorrowSnapshot",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 768,
                "src": "3276:14:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                  "typeString": "struct CToken.BorrowSnapshot"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when interest is accrued",
            "id": 780,
            "name": "AccrueInterest",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 774,
                  "indexed": false,
                  "name": "interestAccumulated",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3433:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 773,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3433:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 776,
                  "indexed": false,
                  "name": "borrowIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3462:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3462:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 778,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3483:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 777,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3483:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3432:72:2"
            },
            "src": "3412:93:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when tokens are minted",
            "id": 788,
            "name": "Mint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 782,
                  "indexed": false,
                  "name": "minter",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3590:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3590:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 784,
                  "indexed": false,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3606:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3606:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 786,
                  "indexed": false,
                  "name": "mintTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3626:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 785,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3626:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3589:56:2"
            },
            "src": "3579:67:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when tokens are redeemed",
            "id": 796,
            "name": "Redeem",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 790,
                  "indexed": false,
                  "name": "redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3735:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 789,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3735:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 792,
                  "indexed": false,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3753:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 791,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3753:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 794,
                  "indexed": false,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3775:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3775:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3734:62:2"
            },
            "src": "3722:75:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when underlying is borrowed",
            "id": 806,
            "name": "Borrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 798,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3889:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3889:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 800,
                  "indexed": false,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3907:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 799,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3907:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 802,
                  "indexed": false,
                  "name": "accountBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3929:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 801,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3929:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 804,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3953:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3888:86:2"
            },
            "src": "3876:99:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when a borrow is repaid",
            "id": 818,
            "name": "RepayBorrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 808,
                  "indexed": false,
                  "name": "payer",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4077:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 807,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4077:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 810,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4100:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4100:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 812,
                  "indexed": false,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4126:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4126:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 814,
                  "indexed": false,
                  "name": "accountBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4155:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4155:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 816,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4187:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4187:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4067:146:2"
            },
            "src": "4050:164:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when a borrow is liquidated",
            "id": 830,
            "name": "LiquidateBorrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 820,
                  "indexed": false,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4324:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4324:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 822,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4352:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4352:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "indexed": false,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4378:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4378:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 826,
                  "indexed": false,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4407:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 825,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4407:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 828,
                  "indexed": false,
                  "name": "seizeTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4441:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4441:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4314:152:2"
            },
            "src": "4293:174:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when pendingAdmin is changed",
            "id": 836,
            "name": "NewPendingAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 835,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 832,
                  "indexed": false,
                  "name": "oldPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 836,
                  "src": "4597:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 831,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4597:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 834,
                  "indexed": false,
                  "name": "newPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 836,
                  "src": "4622:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 833,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4622:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4596:50:2"
            },
            "src": "4575:72:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when pendingAdmin is accepted, which means admin is updated",
            "id": 842,
            "name": "NewAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 838,
                  "indexed": false,
                  "name": "oldAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "4773:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4773:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 840,
                  "indexed": false,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "4791:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 839,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4791:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4772:36:2"
            },
            "src": "4758:51:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when comptroller is changed",
            "id": 848,
            "name": "NewComptroller",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 844,
                  "indexed": false,
                  "name": "oldComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 848,
                  "src": "4909:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 843,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "4909:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 846,
                  "indexed": false,
                  "name": "newComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 848,
                  "src": "4946:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 845,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "4946:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4908:74:2"
            },
            "src": "4888:95:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when interestRateModel is changed",
            "id": 854,
            "name": "NewMarketInterestRateModel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 850,
                  "indexed": false,
                  "name": "oldInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 854,
                  "src": "5101:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 849,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "5101:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 852,
                  "indexed": false,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 854,
                  "src": "5141:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 851,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "5141:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5100:80:2"
            },
            "src": "5068:113:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when the reserve factor is changed",
            "id": 860,
            "name": "NewReserveFactor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 856,
                  "indexed": false,
                  "name": "oldReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 860,
                  "src": "5290:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 855,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5290:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 858,
                  "indexed": false,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 860,
                  "src": "5324:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 857,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5324:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5289:68:2"
            },
            "src": "5267:91:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when the reserves are reduced",
            "id": 868,
            "name": "ReservesReduced",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 862,
                  "indexed": false,
                  "name": "admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5461:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5461:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 864,
                  "indexed": false,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5476:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 863,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5476:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 866,
                  "indexed": false,
                  "name": "newTotalReserves",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5498:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 865,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5498:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5460:63:2"
            },
            "src": "5439:85:2"
          },
          {
            "body": {
              "id": 952,
              "nodeType": "Block",
              "src": "6213:939:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 883,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "6258:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 884,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "6266:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6266:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6258:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 887,
                  "nodeType": "ExpressionStatement",
                  "src": "6258:18:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 888,
                      "name": "initialExchangeRateMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 741,
                      "src": "6324:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 889,
                      "name": "initialExchangeRateMantissa_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 874,
                      "src": "6354:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6324:58:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 891,
                  "nodeType": "ExpressionStatement",
                  "src": "6324:58:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 893,
                          "name": "initialExchangeRateMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 741,
                          "src": "6400:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6430:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6400:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e697469616c2065786368616e67652072617465206d7573742062652067726561746572207468616e207a65726f2e",
                        "id": 896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6433:50:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc602b1a08ed10fc7e07f19746d22c9030609b3ae53c307a434f3a06394237b1",
                          "typeString": "literal_string \"Initial exchange rate must be greater than zero.\""
                        },
                        "value": "Initial exchange rate must be greater than zero."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc602b1a08ed10fc7e07f19746d22c9030609b3ae53c307a434f3a06394237b1",
                          "typeString": "literal_string \"Initial exchange rate must be greater than zero.\""
                        }
                      ],
                      "id": 892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6392:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6392:92:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 898,
                  "nodeType": "ExpressionStatement",
                  "src": "6392:92:2"
                },
                {
                  "assignments": [
                    900
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 900,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 952,
                      "src": "6526:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 899,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 904,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 902,
                        "name": "comptroller_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 870,
                        "src": "6556:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      ],
                      "id": 901,
                      "name": "_setComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4052,
                      "src": "6540:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ComptrollerInterface_$4816_$returns$_t_uint256_$",
                        "typeString": "function (contract ComptrollerInterface) returns (uint256)"
                      }
                    },
                    "id": 903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6540:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6526:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 906,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "6587:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 908,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "6602:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6602:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6594:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6594:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6587:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53657474696e6720636f6d7074726f6c6c6572206661696c6564",
                        "id": 912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6619:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_021b4888766a3fe094b45376267b3d2571ae5f587d6e16c212e0ef4955aca71a",
                          "typeString": "literal_string \"Setting comptroller failed\""
                        },
                        "value": "Setting comptroller failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_021b4888766a3fe094b45376267b3d2571ae5f587d6e16c212e0ef4955aca71a",
                          "typeString": "literal_string \"Setting comptroller failed\""
                        }
                      ],
                      "id": 905,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6579:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6579:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 914,
                  "nodeType": "ExpressionStatement",
                  "src": "6579:69:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 915,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "6764:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 916,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "6785:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 917,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6764:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "6764:37:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 920,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "6811:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 921,
                      "name": "mantissaOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5223,
                      "src": "6825:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6811:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 923,
                  "nodeType": "ExpressionStatement",
                  "src": "6811:25:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 924,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 900,
                      "src": "6927:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 926,
                          "name": "interestRateModel_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 872,
                          "src": "6960:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        ],
                        "id": 925,
                        "name": "_setInterestRateModelFresh",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4389,
                        "src": "6933:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_InterestRateModel_$5819_$returns$_t_uint256_$",
                          "typeString": "function (contract InterestRateModel) returns (uint256)"
                        }
                      },
                      "id": 927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6933:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6927:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 929,
                  "nodeType": "ExpressionStatement",
                  "src": "6927:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 931,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "6997:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 933,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "7012:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7012:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7004:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7004:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6997:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53657474696e6720696e7465726573742072617465206d6f64656c206661696c6564",
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7029:36:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3b79ab0a5afb85f78173dab5946376a2e247564a8a6fc7b3f18909f5e2809bd0",
                          "typeString": "literal_string \"Setting interest rate model failed\""
                        },
                        "value": "Setting interest rate model failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3b79ab0a5afb85f78173dab5946376a2e247564a8a6fc7b3f18909f5e2809bd0",
                          "typeString": "literal_string \"Setting interest rate model failed\""
                        }
                      ],
                      "id": 930,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6989:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6989:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 939,
                  "nodeType": "ExpressionStatement",
                  "src": "6989:77:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 940,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 721,
                      "src": "7077:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 941,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 876,
                      "src": "7084:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7077:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 943,
                  "nodeType": "ExpressionStatement",
                  "src": "7077:12:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 944,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 723,
                      "src": "7099:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 945,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 878,
                      "src": "7108:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7099:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 947,
                  "nodeType": "ExpressionStatement",
                  "src": "7099:16:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 948,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 725,
                      "src": "7125:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 949,
                      "name": "decimals_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 880,
                      "src": "7136:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7125:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 951,
                  "nodeType": "ExpressionStatement",
                  "src": "7125:20:2"
                }
              ]
            },
            "documentation": "@notice Construct a new money market\n@param comptroller_ The address of the Comptroller\n@param interestRateModel_ The address of the interest rate model\n@param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n@param name_ EIP-20 name of this token\n@param symbol_ EIP-20 symbol of this token\n@param decimals_ EIP-20 decimal precision of this token",
            "id": 953,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 870,
                  "name": "comptroller_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "5985:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 869,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "5985:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 872,
                  "name": "interestRateModel_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6028:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 871,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "6028:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 874,
                  "name": "initialExchangeRateMantissa_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6074:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 873,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6074:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 876,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6120:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 875,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6120:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 878,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6149:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 877,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 880,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6180:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6180:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5975:228:2"
            },
            "returnParameters": {
              "id": 882,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6213:0:2"
            },
            "scope": 4422,
            "src": "5964:1188:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1160,
              "nodeType": "Block",
              "src": "7714:2159:2",
              "statements": [
                {
                  "assignments": [
                    967
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 967,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "7767:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 966,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7767:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 977,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 971,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "7821:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7813:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7813:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 973,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "7828:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 974,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "7833:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 975,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "7838:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 968,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "7785:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4791,
                      "src": "7785:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7785:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7767:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 978,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 967,
                      "src": "7859:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7870:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7859:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 990,
                  "nodeType": "IfStatement",
                  "src": "7855:142:2",
                  "trueBody": {
                    "id": 989,
                    "nodeType": "Block",
                    "src": "7873:124:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 982,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "7905:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7905:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 984,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "7934:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7934:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 986,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 967,
                              "src": "7978:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 981,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "7894:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7894:92:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 988,
                        "nodeType": "Return",
                        "src": "7887:99:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 991,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "8053:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 992,
                      "name": "dst",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 959,
                      "src": "8060:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8053:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1002,
                  "nodeType": "IfStatement",
                  "src": "8049:103:2",
                  "trueBody": {
                    "id": 1001,
                    "nodeType": "Block",
                    "src": "8065:87:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 995,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8091:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8091:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 997,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8108:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ALLOWED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8108:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 994,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8086:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8086:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1000,
                        "nodeType": "Return",
                        "src": "8079:62:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1004
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1004,
                      "name": "startingAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8226:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1003,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8226:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1006,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8254:1:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8226:29:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1007,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 955,
                      "src": "8269:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1008,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "8280:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8269:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1026,
                    "nodeType": "Block",
                    "src": "8347:77:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1018,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1004,
                            "src": "8361:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1019,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 763,
                                "src": "8381:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1021,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1020,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "8400:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8381:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1023,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1022,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "8405:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8381:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8361:52:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1025,
                        "nodeType": "ExpressionStatement",
                        "src": "8361:52:2"
                      }
                    ]
                  },
                  "id": 1027,
                  "nodeType": "IfStatement",
                  "src": "8265:159:2",
                  "trueBody": {
                    "id": 1017,
                    "nodeType": "Block",
                    "src": "8285:56:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1010,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1004,
                            "src": "8299:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1013,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "-",
                                "prefix": true,
                                "src": "8327:2:2",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1012,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8328:1:2",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              ],
                              "id": 1011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8319:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 1014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8319:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8299:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1016,
                        "nodeType": "ExpressionStatement",
                        "src": "8299:31:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1029,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8499:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1028,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "8499:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1030,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8499:17:2"
                },
                {
                  "assignments": [
                    1032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1032,
                      "name": "allowanceNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8526:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1033,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8526:20:2"
                },
                {
                  "assignments": [
                    1035
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1035,
                      "name": "srcTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8556:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1034,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1036,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8556:20:2"
                },
                {
                  "assignments": [
                    1038
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1038,
                      "name": "dstTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8586:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1037,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8586:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1039,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8586:20:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1040,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "8618:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1041,
                          "name": "allowanceNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1032,
                          "src": "8627:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1042,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "8617:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1044,
                          "name": "startingAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1004,
                          "src": "8651:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1045,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "8670:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1043,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "8643:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8643:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "8617:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1048,
                  "nodeType": "ExpressionStatement",
                  "src": "8617:60:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1049,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "8691:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1050,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "8702:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8702:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "8691:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1061,
                  "nodeType": "IfStatement",
                  "src": "8687:123:2",
                  "trueBody": {
                    "id": 1060,
                    "nodeType": "Block",
                    "src": "8722:88:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1054,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8748:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8748:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1056,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8766:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ALLOWED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8766:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1053,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8743:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8743:56:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1059,
                        "nodeType": "Return",
                        "src": "8736:63:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1062,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "8821:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1063,
                          "name": "srcTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1035,
                          "src": "8830:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1064,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "8820:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1066,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "8854:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1068,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1067,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 957,
                            "src": "8868:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8854:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1069,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "8874:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1065,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "8846:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8846:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "8820:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1072,
                  "nodeType": "ExpressionStatement",
                  "src": "8820:61:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1073,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "8895:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1074,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "8906:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8906:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "8895:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1085,
                  "nodeType": "IfStatement",
                  "src": "8891:122:2",
                  "trueBody": {
                    "id": 1084,
                    "nodeType": "Block",
                    "src": "8926:87:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1078,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8952:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1079,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8952:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1080,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8970:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ENOUGH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8970:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1077,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8947:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8947:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1083,
                        "nodeType": "Return",
                        "src": "8940:62:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1086,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "9024:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1087,
                          "name": "dstTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1038,
                          "src": "9033:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1088,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9023:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1090,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "9057:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1092,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1091,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 959,
                            "src": "9071:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9057:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1093,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "9077:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1089,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "9049:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9049:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "9023:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1096,
                  "nodeType": "ExpressionStatement",
                  "src": "9023:61:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1097,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "9098:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1098,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "9109:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9109:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "9098:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1109,
                  "nodeType": "IfStatement",
                  "src": "9094:120:2",
                  "trueBody": {
                    "id": 1108,
                    "nodeType": "Block",
                    "src": "9129:85:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1102,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "9155:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1103,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9155:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1104,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "9173:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_TOO_MUCH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9173:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1101,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "9150:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9150:53:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1107,
                        "nodeType": "Return",
                        "src": "9143:60:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1110,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "9341:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1112,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1111,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9355:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9341:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1113,
                      "name": "srcTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "9362:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9341:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "9341:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1116,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "9384:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1118,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1117,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9398:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9384:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1119,
                      "name": "dstTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1038,
                      "src": "9405:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9384:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1121,
                  "nodeType": "ExpressionStatement",
                  "src": "9384:33:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1122,
                      "name": "startingAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1004,
                      "src": "9487:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "9516:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9517:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9508:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9508:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9487:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1137,
                  "nodeType": "IfStatement",
                  "src": "9483:110:2",
                  "trueBody": {
                    "id": 1136,
                    "nodeType": "Block",
                    "src": "9521:72:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1128,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 763,
                                "src": "9535:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1131,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1129,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "9554:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9535:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1132,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1130,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "9559:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9535:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1133,
                            "name": "allowanceNew",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1032,
                            "src": "9570:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9535:47:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1135,
                        "nodeType": "ExpressionStatement",
                        "src": "9535:47:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1139,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9656:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1140,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9661:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1141,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "9666:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1138,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "9647:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9647:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1143,
                  "nodeType": "EmitStatement",
                  "src": "9642:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1148,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "9801:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9793:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9793:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9808:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1151,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9813:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1152,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "9818:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1144,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "9766:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 1146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4802,
                      "src": "9766:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256) external"
                      }
                    },
                    "id": 1153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9766:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1154,
                  "nodeType": "ExpressionStatement",
                  "src": "9766:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1156,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "9851:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 1157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9851:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 1155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9843:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9843:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 965,
                  "id": 1159,
                  "nodeType": "Return",
                  "src": "9836:30:2"
                }
              ]
            },
            "documentation": "@notice Transfer `tokens` tokens from `src` to `dst` by `spender`\n@dev Called by both `transfer` and `transferFrom` internally\n@param spender The address of the account performing the transfer\n@param src The address of the source account\n@param dst The address of the destination account\n@param tokens The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1161,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7628:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7628:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 957,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7645:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 956,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7645:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 959,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7658:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 958,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7658:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 961,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7671:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7627:59:2"
            },
            "returnParameters": {
              "id": 965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 964,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7705:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7705:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7704:9:2"
            },
            "scope": 4422,
            "src": "7604:2269:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1186,
              "nodeType": "Block",
              "src": "10210:102:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1173,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10242:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10242:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1175,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10254:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10254:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1177,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1163,
                          "src": "10266:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1178,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1165,
                          "src": "10271:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1172,
                        "name": "transferTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1161,
                        "src": "10227:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,address,address,uint256) returns (uint256)"
                        }
                      },
                      "id": 1179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10227:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1181,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "10290:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 1182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10290:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 1180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10282:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10282:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10227:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1171,
                  "id": 1185,
                  "nodeType": "Return",
                  "src": "10220:85:2"
                }
              ]
            },
            "documentation": "@notice Transfer `amount` tokens from `msg.sender` to `dst`\n@param dst The address of the destination account\n@param amount The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1187,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1168,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1167,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "10182:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10182:12:2"
              }
            ],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1163,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10144:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10144:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1165,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10157:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10157:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10143:29:2"
            },
            "returnParameters": {
              "id": 1171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1170,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1169,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10203:6:2"
            },
            "scope": 4422,
            "src": "10126:186:2",
            "stateMutability": "nonpayable",
            "superFunction": 4839,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1213,
              "nodeType": "Block",
              "src": "10711:95:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1201,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10743:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10743:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1203,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1189,
                          "src": "10755:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1204,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1191,
                          "src": "10760:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1205,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1193,
                          "src": "10765:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1200,
                        "name": "transferTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1161,
                        "src": "10728:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,address,address,uint256) returns (uint256)"
                        }
                      },
                      "id": 1206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10728:44:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1208,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "10784:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10784:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 1207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10776:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10776:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10728:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1199,
                  "id": 1212,
                  "nodeType": "Return",
                  "src": "10721:78:2"
                }
              ]
            },
            "documentation": "@notice Transfer `amount` tokens from `src` to `dst`\n@param src The address of the source account\n@param dst The address of the destination account\n@param amount The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1214,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1196,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1195,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "10683:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10683:12:2"
              }
            ],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1189,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10632:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1188,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10632:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1191,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10645:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1193,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10658:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1192,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10631:42:2"
            },
            "returnParameters": {
              "id": 1199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1198,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10705:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1197,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10705:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10704:6:2"
            },
            "scope": 4422,
            "src": "10610:196:2",
            "stateMutability": "nonpayable",
            "superFunction": 4850,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1244,
              "nodeType": "Block",
              "src": "11340:158:2",
              "statements": [
                {
                  "assignments": [
                    1224
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1224,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 1244,
                      "src": "11350:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1223,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11350:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1227,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1225,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "11364:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "11364:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11350:24:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1228,
                          "name": "transferAllowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 763,
                          "src": "11384:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 1231,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1229,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1224,
                          "src": "11403:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11384:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1232,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1230,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "11408:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11384:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1233,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1218,
                      "src": "11419:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11384:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1235,
                  "nodeType": "ExpressionStatement",
                  "src": "11384:41:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1237,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1224,
                        "src": "11449:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1238,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "11454:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1239,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1218,
                        "src": "11463:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1236,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4884,
                      "src": "11440:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11440:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1241,
                  "nodeType": "EmitStatement",
                  "src": "11435:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11487:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1222,
                  "id": 1243,
                  "nodeType": "Return",
                  "src": "11480:11:2"
                }
              ]
            },
            "documentation": "@notice Approve `spender` to transfer up to `amount` from `src`\n@dev This will overwrite the approval amount for `spender`\n and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n@param spender The address of the account which may transfer tokens\n@param amount The number of tokens that are approved (-1 means infinite)\n@return Whether or not the approval succeeded",
            "id": 1245,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1216,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11283:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1215,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11283:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1218,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11300:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11300:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11282:33:2"
            },
            "returnParameters": {
              "id": 1222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11334:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11334:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11333:6:2"
            },
            "scope": 4422,
            "src": "11266:232:2",
            "stateMutability": "nonpayable",
            "superFunction": 4859,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1260,
              "nodeType": "Block",
              "src": "11903:58:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1254,
                        "name": "transferAllowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 763,
                        "src": "11920:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 1256,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1255,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1247,
                        "src": "11939:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11920:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1258,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1257,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1249,
                      "src": "11946:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11920:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1253,
                  "id": 1259,
                  "nodeType": "Return",
                  "src": "11913:41:2"
                }
              ]
            },
            "documentation": "@notice Get the current allowance from `owner` for `spender`\n@param owner The address of the account which owns the tokens to be spent\n@param spender The address of the account which may transfer tokens\n@return The number of tokens allowed to be spent (-1 means infinite)",
            "id": 1261,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1247,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11839:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11839:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1249,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11854:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11854:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11838:32:2"
            },
            "returnParameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1252,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11894:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11894:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11893:9:2"
            },
            "scope": 4422,
            "src": "11820:141:2",
            "stateMutability": "view",
            "superFunction": 4868,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1272,
              "nodeType": "Block",
              "src": "12210:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1268,
                      "name": "accountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 757,
                      "src": "12227:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1270,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1269,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1263,
                      "src": "12241:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12227:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1267,
                  "id": 1271,
                  "nodeType": "Return",
                  "src": "12220:27:2"
                }
              ]
            },
            "documentation": "@notice Get the token balance of the `owner`\n@param owner The address of the account to query\n@return The number of tokens owned by `owner`",
            "id": 1273,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1263,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1273,
                  "src": "12163:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12163:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12162:15:2"
            },
            "returnParameters": {
              "id": 1267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1266,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1273,
                  "src": "12201:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12201:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12200:9:2"
            },
            "scope": 4422,
            "src": "12144:110:2",
            "stateMutability": "view",
            "superFunction": 4830,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1307,
              "nodeType": "Block",
              "src": "12573:249:2",
              "statements": [
                {
                  "assignments": [
                    1281
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1281,
                      "name": "exchangeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12583:23:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1280,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "12583:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1286,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1283,
                          "name": "exchangeRateCurrent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1712,
                          "src": "12624:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                            "typeString": "function () returns (uint256)"
                          }
                        },
                        "id": 1284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12624:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1282,
                      "name": "Exp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5226,
                      "src": "12609:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                        "typeString": "type(struct Exponential.Exp storage pointer)"
                      }
                    },
                    "id": 1285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "mantissa"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "12609:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_memory",
                      "typeString": "struct Exponential.Exp memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12583:64:2"
                },
                {
                  "assignments": [
                    1288,
                    1290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1288,
                      "name": "mErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12658:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1287,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "12658:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1290,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12674:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1289,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12674:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1297,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1292,
                        "name": "exchangeRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1281,
                        "src": "12711:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1293,
                          "name": "accountTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 757,
                          "src": "12725:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1295,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1294,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1275,
                          "src": "12739:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12725:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1291,
                      "name": "mulScalarTruncate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5424,
                      "src": "12693:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12693:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12657:89:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1299,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1288,
                          "src": "12764:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1300,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "12772:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12772:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "12764:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1298,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11488,
                      "src": "12756:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12756:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1304,
                  "nodeType": "ExpressionStatement",
                  "src": "12756:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1305,
                    "name": "balance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1290,
                    "src": "12808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1279,
                  "id": 1306,
                  "nodeType": "Return",
                  "src": "12801:14:2"
                }
              ]
            },
            "documentation": "@notice Get the underlying balance of the `owner`\n@dev This also accrues interest in a transaction\n@param owner The address of the account to query\n@return The amount of underlying owned by `owner`",
            "id": 1308,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1275,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1308,
                  "src": "12531:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12531:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12530:15:2"
            },
            "returnParameters": {
              "id": 1279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1278,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1308,
                  "src": "12564:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1277,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12564:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12563:9:2"
            },
            "scope": 4422,
            "src": "12502:320:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1390,
              "nodeType": "Block",
              "src": "13264:611:2",
              "statements": [
                {
                  "assignments": [
                    1322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1322,
                      "name": "cTokenBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13274:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1321,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13274:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1326,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1323,
                      "name": "accountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 757,
                      "src": "13298:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1325,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1324,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1310,
                      "src": "13312:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13298:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13274:46:2"
                },
                {
                  "assignments": [
                    1328
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1328,
                      "name": "borrowBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13330:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1327,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13330:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1329,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13330:21:2"
                },
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "name": "exchangeRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13361:28:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13361:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1332,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13361:28:2"
                },
                {
                  "assignments": [
                    1334
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1334,
                      "name": "mErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13400:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1333,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "13400:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1335,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13400:14:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1336,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1334,
                          "src": "13426:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1337,
                          "name": "borrowBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1328,
                          "src": "13432:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1338,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "13425:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1340,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1310,
                          "src": "13477:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1339,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "13449:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13449:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "13425:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1343,
                  "nodeType": "ExpressionStatement",
                  "src": "13425:60:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1344,
                      "name": "mErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1334,
                      "src": "13499:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1345,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "13507:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13507:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "13499:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1358,
                  "nodeType": "IfStatement",
                  "src": "13495:100:2",
                  "trueBody": {
                    "id": 1357,
                    "nodeType": "Block",
                    "src": "13527:68:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1349,
                                    "name": "Error",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "13557:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                      "typeString": "type(enum TokenErrorReporter.Error)"
                                    }
                                  },
                                  "id": 1350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "MATH_ERROR",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13557:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                ],
                                "id": 1348,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13549:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13549:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1352,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13576:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13579:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13582:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13548:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(uint256,int_const 0,int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1320,
                        "id": 1356,
                        "nodeType": "Return",
                        "src": "13541:43:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1359,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1334,
                          "src": "13606:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1360,
                          "name": "exchangeRateMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1331,
                          "src": "13612:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1361,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "13605:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1362,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "13636:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13636:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "13605:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1365,
                  "nodeType": "ExpressionStatement",
                  "src": "13605:59:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1366,
                      "name": "mErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1334,
                      "src": "13678:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1367,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "13686:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13686:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "13678:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1380,
                  "nodeType": "IfStatement",
                  "src": "13674:100:2",
                  "trueBody": {
                    "id": 1379,
                    "nodeType": "Block",
                    "src": "13706:68:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1371,
                                    "name": "Error",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "13736:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                      "typeString": "type(enum TokenErrorReporter.Error)"
                                    }
                                  },
                                  "id": 1372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "MATH_ERROR",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13736:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                ],
                                "id": 1370,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13728:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13728:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13755:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13758:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13761:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1377,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13727:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(uint256,int_const 0,int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1320,
                        "id": 1378,
                        "nodeType": "Return",
                        "src": "13720:43:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1382,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "13800:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                "typeString": "type(enum TokenErrorReporter.Error)"
                              }
                            },
                            "id": 1383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13800:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 1381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13792:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13792:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1385,
                        "name": "cTokenBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1322,
                        "src": "13817:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1386,
                        "name": "borrowBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1328,
                        "src": "13832:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1387,
                        "name": "exchangeRateMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "13847:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 1388,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13791:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 1320,
                  "id": 1389,
                  "nodeType": "Return",
                  "src": "13784:84:2"
                }
              ]
            },
            "documentation": "@notice Get a snapshot of the account's balances, and the cached exchange rate\n@dev This is used by comptroller to more efficiently perform liquidity checks.\n@param account Address of the account to snapshot\n@return (possible error, token balance, borrow balance, exchange rate mantissa)",
            "id": 1391,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountSnapshot",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1310,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13188:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1309,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13188:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13187:17:2"
            },
            "returnParameters": {
              "id": 1320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1313,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13228:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1312,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13228:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13237:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13237:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1317,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13246:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1319,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13255:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13255:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13227:36:2"
            },
            "scope": 4422,
            "src": "13160:715:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1399,
              "nodeType": "Block",
              "src": "14086:36:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1396,
                      "name": "block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11475,
                      "src": "14103:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_block",
                        "typeString": "block"
                      }
                    },
                    "id": 1397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "number",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "14103:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1395,
                  "id": 1398,
                  "nodeType": "Return",
                  "src": "14096:19:2"
                }
              ]
            },
            "documentation": "@dev Function to simply retrieve block number\n This exists mainly for inheriting test contracts to stub this result.",
            "id": 1400,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBlockNumber",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14051:2:2"
            },
            "returnParameters": {
              "id": 1395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1394,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1400,
                  "src": "14077:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14077:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14076:9:2"
            },
            "scope": 4422,
            "src": "14028:94:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1426,
              "nodeType": "Block",
              "src": "14354:331:2",
              "statements": [
                {
                  "assignments": [
                    1406,
                    1408
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1406,
                      "name": "opaqueErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1426,
                      "src": "14365:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14365:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1408,
                      "name": "borrowRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1426,
                      "src": "14384:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1407,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14384:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1411,
                          "name": "getCashPrior",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4394,
                          "src": "14459:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14459:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1413,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "14487:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1414,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "14513:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1409,
                        "name": "interestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "14414:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "id": 1410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5813,
                      "src": "14414:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 1415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14414:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14364:172:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1418,
                          "name": "opaqueErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1406,
                          "src": "14554:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14567:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14554:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f7752617465506572426c6f636b3a20696e746572657374526174654d6f64656c2e626f72726f7752617465206661696c6564",
                        "id": 1421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14570:57:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2632d6009e621d16eeea426ae3a605e809011e822fba4dd42ad39bd0871d90c",
                          "typeString": "literal_string \"borrowRatePerBlock: interestRateModel.borrowRate failed\""
                        },
                        "value": "borrowRatePerBlock: interestRateModel.borrowRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2632d6009e621d16eeea426ae3a605e809011e822fba4dd42ad39bd0871d90c",
                          "typeString": "literal_string \"borrowRatePerBlock: interestRateModel.borrowRate failed\""
                        }
                      ],
                      "id": 1417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "14546:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14546:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1423,
                  "nodeType": "ExpressionStatement",
                  "src": "14546:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1424,
                    "name": "borrowRateMantissa",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1408,
                    "src": "14660:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1404,
                  "id": 1425,
                  "nodeType": "Return",
                  "src": "14653:25:2"
                }
              ]
            },
            "documentation": "@notice Returns the current per-block borrow interest rate for this cToken\n@return The borrow interest rate per block, scaled by 1e18",
            "id": 1427,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowRatePerBlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14319:2:2"
            },
            "returnParameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1403,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "14345:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14345:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14344:9:2"
            },
            "scope": 4422,
            "src": "14292:393:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1536,
              "nodeType": "Block",
              "src": "14917:1550:2",
              "statements": [
                {
                  "assignments": [
                    1433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1433,
                      "name": "exchangeRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15156:28:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1432,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15156:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1436,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1434,
                      "name": "exchangeRateStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "15187:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15187:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15156:51:2"
                },
                {
                  "assignments": [
                    1438,
                    1440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1438,
                      "name": "e0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15219:10:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1437,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15219:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1440,
                      "name": "borrowRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15231:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1439,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15231:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1448,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1443,
                          "name": "getCashPrior",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4394,
                          "src": "15306:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15306:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1445,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "15334:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1446,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "15360:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1441,
                        "name": "interestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "15261:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "id": 1442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5813,
                      "src": "15261:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 1447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15261:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15218:165:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1450,
                          "name": "e0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1438,
                          "src": "15401:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15407:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15401:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7752617465206661696c6564",
                        "id": 1453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15410:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a6c999b4916221d3605b6a71ee27723e9d9e2d4803d1324e772f17b965fbf216",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowRate failed\""
                        },
                        "value": "supplyRatePerBlock: calculating borrowRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a6c999b4916221d3605b6a71ee27723e9d9e2d4803d1324e772f17b965fbf216",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowRate failed\""
                        }
                      ],
                      "id": 1449,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15393:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15393:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1455,
                  "nodeType": "ExpressionStatement",
                  "src": "15393:69:2"
                },
                {
                  "assignments": [
                    1457,
                    1459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1457,
                      "name": "e1",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15489:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1456,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15489:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1459,
                      "name": "underlying",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15503:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1458,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15503:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1466,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1462,
                            "name": "exchangeRateMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1433,
                            "src": "15553:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1461,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15538:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15538:37:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1464,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 753,
                        "src": "15577:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1460,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "15528:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15528:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15488:101:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1468,
                          "name": "e1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1457,
                          "src": "15607:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1469,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "15613:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15613:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "15607:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720756e6465726c79696e67206661696c6564",
                        "id": 1472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15633:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ab41aa94568cf71d54c9607b85c5ad309cb5419e821301d65e8961fc4d748f3",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating underlying failed\""
                        },
                        "value": "supplyRatePerBlock: calculating underlying failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ab41aa94568cf71d54c9607b85c5ad309cb5419e821301d65e8961fc4d748f3",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating underlying failed\""
                        }
                      ],
                      "id": 1467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15599:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15599:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1474,
                  "nodeType": "ExpressionStatement",
                  "src": "15599:86:2"
                },
                {
                  "assignments": [
                    1476,
                    1478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1476,
                      "name": "e2",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15697:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1475,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15697:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1478,
                      "name": "borrowsPer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15711:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1477,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15711:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1483,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1480,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "15751:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1481,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "15765:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1479,
                      "name": "divScalarByExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5544,
                      "src": "15736:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15736:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15696:80:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1485,
                          "name": "e2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1476,
                          "src": "15794:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1486,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "15800:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15800:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "15794:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7773506572206661696c6564",
                        "id": 1489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15820:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_23d703eca9ecff1ad872cb6b80905166f048c1bf1a3a2a091debe587db4b3086",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowsPer failed\""
                        },
                        "value": "supplyRatePerBlock: calculating borrowsPer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_23d703eca9ecff1ad872cb6b80905166f048c1bf1a3a2a091debe587db4b3086",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowsPer failed\""
                        }
                      ],
                      "id": 1484,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15786:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15786:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1491,
                  "nodeType": "ExpressionStatement",
                  "src": "15786:86:2"
                },
                {
                  "assignments": [
                    1493,
                    1495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1493,
                      "name": "e3",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15884:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1492,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15884:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1495,
                      "name": "oneMinusReserveFactor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15898:32:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1494,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15898:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1504,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1498,
                            "name": "mantissaOne",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5223,
                            "src": "15969:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1497,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15954:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15954:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1501,
                            "name": "reserveFactorMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 743,
                            "src": "16011:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1500,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15996:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15996:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1496,
                      "name": "subExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5345,
                      "src": "15934:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15934:110:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15883:161:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1506,
                          "name": "e3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1493,
                          "src": "16062:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1507,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "16068:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "16068:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "16062:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e67206f6e654d696e757352657365727665466163746f72206661696c6564",
                        "id": 1510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16088:62:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b498901816e4ef82201a022e22bcc6acb7786f1e11debe4dae0d80af8abbb143",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating oneMinusReserveFactor failed\""
                        },
                        "value": "supplyRatePerBlock: calculating oneMinusReserveFactor failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b498901816e4ef82201a022e22bcc6acb7786f1e11debe4dae0d80af8abbb143",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating oneMinusReserveFactor failed\""
                        }
                      ],
                      "id": 1505,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16054:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16054:97:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1512,
                  "nodeType": "ExpressionStatement",
                  "src": "16054:97:2"
                },
                {
                  "assignments": [
                    1514,
                    1516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1514,
                      "name": "e4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "16163:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1513,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "16163:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1516,
                      "name": "supplyRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "16177:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1515,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "16177:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1519,
                            "name": "borrowRateMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1440,
                            "src": "16238:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1518,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "16223:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "16223:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1521,
                        "name": "oneMinusReserveFactor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1495,
                        "src": "16272:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1522,
                        "name": "borrowsPer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "16307:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1517,
                      "name": "mulExp3",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5720,
                      "src": "16202:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16202:125:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16162:165:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1526,
                          "name": "e4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1514,
                          "src": "16345:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1527,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "16351:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "16351:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "16345:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720737570706c7952617465206661696c6564",
                        "id": 1530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16371:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6d0b372024ce395b258eed06f15680143185aaef9b81b07ef9a9363d58b8b389",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating supplyRate failed\""
                        },
                        "value": "supplyRatePerBlock: calculating supplyRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6d0b372024ce395b258eed06f15680143185aaef9b81b07ef9a9363d58b8b389",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating supplyRate failed\""
                        }
                      ],
                      "id": 1525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16337:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16337:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1532,
                  "nodeType": "ExpressionStatement",
                  "src": "16337:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1533,
                      "name": "supplyRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1516,
                      "src": "16441:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp memory"
                      }
                    },
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "mantissa",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 5225,
                    "src": "16441:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1431,
                  "id": 1535,
                  "nodeType": "Return",
                  "src": "16434:26:2"
                }
              ]
            },
            "documentation": "@notice Returns the current per-block supply interest rate for this cToken\n@return The supply interest rate per block, scaled by 1e18",
            "id": 1537,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supplyRatePerBlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14882:2:2"
            },
            "returnParameters": {
              "id": 1431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1430,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "14908:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14907:9:2"
            },
            "scope": 4422,
            "src": "14855:1612:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1557,
              "nodeType": "Block",
              "src": "16678:124:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1545,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "16696:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16696:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1548,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "16724:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "16724:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16716:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16716:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16696:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16741:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1544,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16688:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16688:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1554,
                  "nodeType": "ExpressionStatement",
                  "src": "16688:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1555,
                    "name": "totalBorrows",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 749,
                    "src": "16783:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1543,
                  "id": 1556,
                  "nodeType": "Return",
                  "src": "16776:19:2"
                }
              ]
            },
            "documentation": "@notice Returns the current total borrows plus accrued interest\n@return The total borrows with interest",
            "id": 1558,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1540,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1539,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "16647:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16647:12:2"
              }
            ],
            "name": "totalBorrowsCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16635:2:2"
            },
            "returnParameters": {
              "id": 1543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1542,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "16669:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16669:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16668:9:2"
            },
            "scope": 4422,
            "src": "16607:195:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1582,
              "nodeType": "Block",
              "src": "17173:140:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1568,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "17191:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17191:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1571,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "17219:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "17219:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17211:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17211:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17191:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17236:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17183:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17183:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1577,
                  "nodeType": "ExpressionStatement",
                  "src": "17183:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1560,
                        "src": "17298:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1578,
                      "name": "borrowBalanceStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1609,
                      "src": "17278:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 1580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17278:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1566,
                  "id": 1581,
                  "nodeType": "Return",
                  "src": "17271:35:2"
                }
              ]
            },
            "documentation": "@notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\n@param account The address whose balance should be calculated after updating borrowIndex\n@return The calculated balance",
            "id": 1583,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1563,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1562,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "17142:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17142:12:2"
              }
            ],
            "name": "borrowBalanceCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1560,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1583,
                  "src": "17116:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17116:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17115:17:2"
            },
            "returnParameters": {
              "id": 1566,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1565,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1583,
                  "src": "17164:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17164:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17163:9:2"
            },
            "scope": 4422,
            "src": "17086:227:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1608,
              "nodeType": "Block",
              "src": "17591:213:2",
              "statements": [
                {
                  "assignments": [
                    1591,
                    1593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1591,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 1608,
                      "src": "17602:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1590,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "17602:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1593,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1608,
                      "src": "17617:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17617:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1597,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1595,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1585,
                        "src": "17663:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1594,
                      "name": "borrowBalanceStoredInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1690,
                      "src": "17635:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17635:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17601:70:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1599,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1591,
                          "src": "17689:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1600,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "17696:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "17696:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "17689:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f7742616c616e636553746f7265643a20626f72726f7742616c616e636553746f726564496e7465726e616c206661696c6564",
                        "id": 1603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17716:57:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8825dc702edb5f60088d39fa3a6dc2db62be3613ea83047e025f5e671831b860",
                          "typeString": "literal_string \"borrowBalanceStored: borrowBalanceStoredInternal failed\""
                        },
                        "value": "borrowBalanceStored: borrowBalanceStoredInternal failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8825dc702edb5f60088d39fa3a6dc2db62be3613ea83047e025f5e671831b860",
                          "typeString": "literal_string \"borrowBalanceStored: borrowBalanceStoredInternal failed\""
                        }
                      ],
                      "id": 1598,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17681:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17681:93:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1605,
                  "nodeType": "ExpressionStatement",
                  "src": "17681:93:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1606,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1593,
                    "src": "17791:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1589,
                  "id": 1607,
                  "nodeType": "Return",
                  "src": "17784:13:2"
                }
              ]
            },
            "documentation": "@notice Return the borrow balance of account based on stored data\n@param account The address whose balance should be calculated\n@return The calculated balance",
            "id": 1609,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowBalanceStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1585,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1609,
                  "src": "17544:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17544:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17543:17:2"
            },
            "returnParameters": {
              "id": 1589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1588,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1609,
                  "src": "17582:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17582:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17581:9:2"
            },
            "scope": 4422,
            "src": "17515:289:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1689,
              "nodeType": "Block",
              "src": "18148:1150:2",
              "statements": [
                {
                  "assignments": [
                    1619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1619,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18225:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1618,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "18225:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1620,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18225:17:2"
                },
                {
                  "assignments": [
                    1622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1622,
                      "name": "principalTimesIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18252:27:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1621,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18252:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1623,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18252:27:2"
                },
                {
                  "assignments": [
                    1625
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1625,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18289:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1624,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18289:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1626,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18289:14:2"
                },
                {
                  "assignments": [
                    1628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1628,
                      "name": "borrowSnapshot",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18362:37:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                        "typeString": "struct CToken.BorrowSnapshot"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1627,
                        "name": "BorrowSnapshot",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 768,
                        "src": "18362:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                          "typeString": "struct CToken.BorrowSnapshot"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1632,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1629,
                      "name": "accountBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "18402:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                        "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                      }
                    },
                    "id": 1631,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1630,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1611,
                      "src": "18417:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18402:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                      "typeString": "struct CToken.BorrowSnapshot storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18362:63:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1633,
                        "name": "borrowSnapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1628,
                        "src": "18626:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                          "typeString": "struct CToken.BorrowSnapshot storage pointer"
                        }
                      },
                      "id": 1634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "18626:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18654:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18626:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1643,
                  "nodeType": "IfStatement",
                  "src": "18622:90:2",
                  "trueBody": {
                    "id": 1642,
                    "nodeType": "Block",
                    "src": "18657:55:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1637,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "18679:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "18679:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18699:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1640,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "18678:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1641,
                        "nodeType": "Return",
                        "src": "18671:30:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1644,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1619,
                          "src": "18902:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1645,
                          "name": "principalTimesIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "18911:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1646,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "18901:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1648,
                            "name": "borrowSnapshot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "18942:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                              "typeString": "struct CToken.BorrowSnapshot storage pointer"
                            }
                          },
                          "id": 1649,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "principal",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 765,
                          "src": "18942:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1650,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "18968:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1647,
                        "name": "mulUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4475,
                        "src": "18934:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18934:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "18901:79:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1653,
                  "nodeType": "ExpressionStatement",
                  "src": "18901:79:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1654,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1619,
                      "src": "18994:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1655,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "19005:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19005:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "18994:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1663,
                  "nodeType": "IfStatement",
                  "src": "18990:79:2",
                  "trueBody": {
                    "id": 1662,
                    "nodeType": "Block",
                    "src": "19025:44:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 1658,
                              "name": "mathErr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1619,
                              "src": "19047:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19056:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1660,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19046:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1661,
                        "nodeType": "Return",
                        "src": "19039:19:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1664,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1619,
                          "src": "19080:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1665,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1625,
                          "src": "19089:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1666,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "19079:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1668,
                          "name": "principalTimesIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "19107:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "borrowSnapshot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "19128:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                              "typeString": "struct CToken.BorrowSnapshot storage pointer"
                            }
                          },
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 767,
                          "src": "19128:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1667,
                        "name": "divUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4504,
                        "src": "19099:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19099:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "19079:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1673,
                  "nodeType": "ExpressionStatement",
                  "src": "19079:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1674,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1619,
                      "src": "19171:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1675,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "19182:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19182:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "19171:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1683,
                  "nodeType": "IfStatement",
                  "src": "19167:79:2",
                  "trueBody": {
                    "id": 1682,
                    "nodeType": "Block",
                    "src": "19202:44:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 1678,
                              "name": "mathErr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1619,
                              "src": "19224:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19233:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1680,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19223:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1681,
                        "nodeType": "Return",
                        "src": "19216:19:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1684,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "19264:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 1685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "19264:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1686,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1625,
                        "src": "19284:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 1687,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "19263:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 1617,
                  "id": 1688,
                  "nodeType": "Return",
                  "src": "19256:35:2"
                }
              ]
            },
            "documentation": "@notice Return the borrow balance of account based on stored data\n@param account The address whose balance should be calculated\n@return (error code, the calculated balance or 0 if error code is non-zero)",
            "id": 1690,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowBalanceStoredInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1611,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18088:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1610,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18088:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18087:17:2"
            },
            "returnParameters": {
              "id": 1617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1614,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18128:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1613,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "18128:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1616,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18139:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1615,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18139:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18127:20:2"
            },
            "scope": 4422,
            "src": "18051:1247:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1711,
              "nodeType": "Block",
              "src": "19516:132:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1698,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "19534:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19534:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1701,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "19562:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1702,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19562:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "19554:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19554:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19534:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19579:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1697,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19526:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19526:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1707,
                  "nodeType": "ExpressionStatement",
                  "src": "19526:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1708,
                      "name": "exchangeRateStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "19621:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19621:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1696,
                  "id": 1710,
                  "nodeType": "Return",
                  "src": "19614:27:2"
                }
              ]
            },
            "documentation": "@notice Accrue interest then return the up-to-date exchange rate\n@return Calculated exchange rate scaled by 1e18",
            "id": 1712,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1693,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1692,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "19485:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19485:12:2"
              }
            ],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19475:2:2"
            },
            "returnParameters": {
              "id": 1696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1695,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "19507:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19507:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19506:9:2"
            },
            "scope": 4422,
            "src": "19447:201:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "19951:203:2",
              "statements": [
                {
                  "assignments": [
                    1718,
                    1720
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1718,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 1734,
                      "src": "19962:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1717,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "19962:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1720,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1734,
                      "src": "19977:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1719,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19977:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1723,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1721,
                      "name": "exchangeRateStoredInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1813,
                      "src": "19995:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19995:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19961:62:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1725,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1718,
                          "src": "20041:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1726,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "20048:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "20048:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "20041:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "65786368616e67655261746553746f7265643a2065786368616e67655261746553746f726564496e7465726e616c206661696c6564",
                        "id": 1729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20068:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dbb9242fc3facb546962a4d074b33f7d1e2606e6817021a0c962231003173b9b",
                          "typeString": "literal_string \"exchangeRateStored: exchangeRateStoredInternal failed\""
                        },
                        "value": "exchangeRateStored: exchangeRateStoredInternal failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dbb9242fc3facb546962a4d074b33f7d1e2606e6817021a0c962231003173b9b",
                          "typeString": "literal_string \"exchangeRateStored: exchangeRateStoredInternal failed\""
                        }
                      ],
                      "id": 1724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20033:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20033:91:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1731,
                  "nodeType": "ExpressionStatement",
                  "src": "20033:91:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1732,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1720,
                    "src": "20141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1716,
                  "id": 1733,
                  "nodeType": "Return",
                  "src": "20134:13:2"
                }
              ]
            },
            "documentation": "@notice Calculates the exchange rate from the underlying to the CToken\n@dev This function does not accrue interest before calculating the exchange rate\n@return Calculated exchange rate scaled by 1e18",
            "id": 1735,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19918:2:2"
            },
            "returnParameters": {
              "id": 1716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1715,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1735,
                  "src": "19942:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1714,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19942:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19941:9:2"
            },
            "scope": 4422,
            "src": "19891:263:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1812,
              "nodeType": "Block",
              "src": "20492:1041:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1742,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "20506:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20521:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20506:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1810,
                    "nodeType": "Block",
                    "src": "20739:788:2",
                    "statements": [
                      {
                        "assignments": [
                          1752
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1752,
                            "name": "totalCash",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20898:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1751,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20898:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1755,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1753,
                            "name": "getCashPrior",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4394,
                            "src": "20918:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20918:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20898:34:2"
                      },
                      {
                        "assignments": [
                          1757
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1757,
                            "name": "cashPlusBorrowsMinusReserves",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20946:36:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1756,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20946:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1758,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20946:36:2"
                      },
                      {
                        "assignments": [
                          1760
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1760,
                            "name": "exchangeRate",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20996:23:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1759,
                              "name": "Exp",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5226,
                              "src": "20996:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                                "typeString": "struct Exponential.Exp"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1761,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20996:23:2"
                      },
                      {
                        "assignments": [
                          1763
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1763,
                            "name": "mathErr",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "21033:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1762,
                              "name": "MathError",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4429,
                              "src": "21033:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1764,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21033:17:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 1765,
                                "name": "mathErr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1763,
                                "src": "21066:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1766,
                                "name": "cashPlusBorrowsMinusReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "21075:28:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1767,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "21065:39:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1769,
                                "name": "totalCash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1752,
                                "src": "21122:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1770,
                                "name": "totalBorrows",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 749,
                                "src": "21133:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1771,
                                "name": "totalReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 751,
                                "src": "21147:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1768,
                              "name": "addThenSubUInt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4606,
                              "src": "21107:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 1772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21107:54:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "21065:96:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1774,
                        "nodeType": "ExpressionStatement",
                        "src": "21065:96:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1775,
                            "name": "mathErr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1763,
                            "src": "21179:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1776,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "21190:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 1777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21190:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "21179:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1784,
                        "nodeType": "IfStatement",
                        "src": "21175:87:2",
                        "trueBody": {
                          "id": 1783,
                          "nodeType": "Block",
                          "src": "21210:52:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1779,
                                    "name": "mathErr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1763,
                                    "src": "21236:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_MathError_$4429",
                                      "typeString": "enum CarefulMath.MathError"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21245:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "id": 1781,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21235:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                                  "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                                }
                              },
                              "functionReturnParameters": 1741,
                              "id": 1782,
                              "nodeType": "Return",
                              "src": "21228:19:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 1785,
                                "name": "mathErr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1763,
                                "src": "21277:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1786,
                                "name": "exchangeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "21286:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              }
                            ],
                            "id": 1787,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "21276:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                              "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1789,
                                "name": "cashPlusBorrowsMinusReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "21309:28:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1790,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 753,
                                "src": "21339:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1788,
                              "name": "getExp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5287,
                              "src": "21302:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                                "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                              }
                            },
                            "id": 1791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21302:49:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                              "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                            }
                          },
                          "src": "21276:75:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1793,
                        "nodeType": "ExpressionStatement",
                        "src": "21276:75:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 1797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1794,
                            "name": "mathErr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1763,
                            "src": "21369:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1795,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "21380:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 1796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21380:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "21369:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1803,
                        "nodeType": "IfStatement",
                        "src": "21365:87:2",
                        "trueBody": {
                          "id": 1802,
                          "nodeType": "Block",
                          "src": "21400:52:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1798,
                                    "name": "mathErr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1763,
                                    "src": "21426:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_MathError_$4429",
                                      "typeString": "enum CarefulMath.MathError"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1799,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21435:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "id": 1800,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21425:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                                  "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                                }
                              },
                              "functionReturnParameters": 1741,
                              "id": 1801,
                              "nodeType": "Return",
                              "src": "21418:19:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1804,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "21474:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "21474:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1806,
                                "name": "exchangeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "21494:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              },
                              "id": 1807,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5225,
                              "src": "21494:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 1808,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "21473:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                            "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                          }
                        },
                        "functionReturnParameters": 1741,
                        "id": 1809,
                        "nodeType": "Return",
                        "src": "21466:50:2"
                      }
                    ]
                  },
                  "id": 1811,
                  "nodeType": "IfStatement",
                  "src": "20502:1025:2",
                  "trueBody": {
                    "id": 1750,
                    "nodeType": "Block",
                    "src": "20524:209:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1745,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "20674:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20674:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1747,
                              "name": "initialExchangeRateMantissa",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "20694:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 1748,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "20673:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                            "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                          }
                        },
                        "functionReturnParameters": 1741,
                        "id": 1749,
                        "nodeType": "Return",
                        "src": "20666:56:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Calculates the exchange rate from the underlying to the CToken\n@dev This function does not accrue interest before calculating the exchange rate\n@return (error code, calculated exchange rate scaled by 1e18)",
            "id": 1813,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStoredInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20446:2:2"
            },
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1738,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1813,
                  "src": "20472:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1737,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "20472:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1740,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1813,
                  "src": "20483:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20483:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20471:20:2"
            },
            "scope": 4422,
            "src": "20411:1122:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1821,
              "nodeType": "Block",
              "src": "21748:38:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1818,
                      "name": "getCashPrior",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4394,
                      "src": "21765:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21765:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1817,
                  "id": 1820,
                  "nodeType": "Return",
                  "src": "21758:21:2"
                }
              ]
            },
            "documentation": "@notice Get cash balance of this cToken in the underlying asset\n@return The quantity of underlying asset owned by this contract",
            "id": 1822,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1814,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21713:2:2"
            },
            "returnParameters": {
              "id": 1817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1816,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1822,
                  "src": "21739:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21739:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21738:9:2"
            },
            "scope": 4422,
            "src": "21697:89:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "canonicalName": "CToken.AccrueInterestLocalVars",
            "id": 1843,
            "members": [
              {
                "constant": false,
                "id": 1824,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21833:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1823,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "21833:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1826,
                "name": "opaqueErr",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21860:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1825,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21860:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1828,
                "name": "borrowRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21887:26:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1827,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21887:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1830,
                "name": "currentBlockNumber",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21923:26:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1829,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21923:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1832,
                "name": "blockDelta",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21959:18:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1831,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21959:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1834,
                "name": "simpleInterestFactor",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21987:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                  "typeString": "struct Exponential.Exp"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1833,
                  "name": "Exp",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5226,
                  "src": "21987:3:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                    "typeString": "struct Exponential.Exp"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1836,
                "name": "interestAccumulated",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22021:27:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1835,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22021:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1838,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22058:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1837,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22058:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1840,
                "name": "totalReservesNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22091:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1839,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22091:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1842,
                "name": "borrowIndexNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22125:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1841,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22125:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "AccrueInterestLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "21792:362:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2112,
              "nodeType": "Block",
              "src": "22454:4286:2",
              "statements": [
                {
                  "assignments": [
                    1849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1849,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2112,
                      "src": "22464:35:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                        "typeString": "struct CToken.AccrueInterestLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1848,
                        "name": "AccrueInterestLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1843,
                        "src": "22464:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_storage_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1850,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22464:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1851,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22568:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1853,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "opaqueErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1826,
                          "src": "22568:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1854,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22584:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1855,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "borrowRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1828,
                          "src": "22584:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1856,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "22567:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1859,
                            "name": "getCashPrior",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4394,
                            "src": "22656:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22656:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1861,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "22684:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1862,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "22710:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1857,
                          "name": "interestRateModel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 739,
                          "src": "22611:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5813,
                        "src": "22611:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                        }
                      },
                      "id": 1863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22611:122:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "22567:166:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1865,
                  "nodeType": "ExpressionStatement",
                  "src": "22567:166:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1867,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22751:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1868,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "borrowRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1828,
                          "src": "22751:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1869,
                          "name": "borrowRateMaxMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 728,
                          "src": "22778:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22751:48:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f772072617465206973206162737572646c792068696768",
                        "id": 1871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22801:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea",
                          "typeString": "literal_string \"borrow rate is absurdly high\""
                        },
                        "value": "borrow rate is absurdly high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea",
                          "typeString": "literal_string \"borrow rate is absurdly high\""
                        }
                      ],
                      "id": 1866,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "22743:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22743:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1873,
                  "nodeType": "ExpressionStatement",
                  "src": "22743:89:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1874,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "22846:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "opaqueErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1826,
                      "src": "22846:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22864:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22846:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1888,
                  "nodeType": "IfStatement",
                  "src": "22842:270:2",
                  "trueBody": {
                    "id": 1887,
                    "nodeType": "Block",
                    "src": "22867:245:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1879,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "22936:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1880,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INTEREST_RATE_MODEL_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "22936:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1881,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "22989:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1882,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "22989:58:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1883,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1849,
                                "src": "23069:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                  "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                }
                              },
                              "id": 1884,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "opaqueErr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1826,
                              "src": "23069:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1878,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "22904:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22904:197:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1886,
                        "nodeType": "Return",
                        "src": "22881:220:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1889,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "23170:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1891,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "currentBlockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1830,
                      "src": "23170:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1892,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "23196:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 1893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23196:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23170:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1895,
                  "nodeType": "ExpressionStatement",
                  "src": "23170:42:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1896,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23300:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23300:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1899,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23314:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "blockDelta",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1832,
                          "src": "23314:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1901,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "23299:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1903,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23341:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1904,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "currentBlockNumber",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1830,
                          "src": "23341:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1905,
                          "name": "accrualBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 745,
                          "src": "23366:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1902,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "23333:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23333:52:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "23299:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1908,
                  "nodeType": "ExpressionStatement",
                  "src": "23299:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1914,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1910,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23402:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23402:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1912,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "23418:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23418:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "23402:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1909,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11474,
                      "src": "23395:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23395:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1916,
                  "nodeType": "ExpressionStatement",
                  "src": "23395:42:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1917,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23983:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1919,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23983:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1920,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23997:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1921,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "23997:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        }
                      ],
                      "id": 1922,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "23982:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                        "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1925,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1849,
                                "src": "24064:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                  "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                }
                              },
                              "id": 1926,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "borrowRateMantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1828,
                              "src": "24064:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1924,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "24049:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 1927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "24049:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1928,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24103:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1929,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "blockDelta",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1832,
                          "src": "24103:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1923,
                        "name": "mulScalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5386,
                        "src": "24026:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                        }
                      },
                      "id": 1930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24026:102:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "src": "23982:146:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1932,
                  "nodeType": "ExpressionStatement",
                  "src": "23982:146:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1933,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24142:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24142:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1935,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24158:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24158:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24142:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1950,
                  "nodeType": "IfStatement",
                  "src": "24138:288:2",
                  "trueBody": {
                    "id": 1949,
                    "nodeType": "Block",
                    "src": "24178:248:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1939,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "24247:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24247:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1941,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "24285:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24285:69:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1944,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "24384:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 1945,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "24384:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 1943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24376:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24376:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1938,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "24215:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24215:200:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1948,
                        "nodeType": "Return",
                        "src": "24192:223:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1951,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24437:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1953,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "24437:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1954,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24451:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1955,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "24451:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1956,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "24436:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1958,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24497:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1959,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "24497:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1960,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "24524:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1957,
                        "name": "mulScalarTruncate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5424,
                        "src": "24479:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24479:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "24436:101:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1963,
                  "nodeType": "ExpressionStatement",
                  "src": "24436:101:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1964,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24551:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1965,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24551:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1966,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24567:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24567:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24551:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1981,
                  "nodeType": "IfStatement",
                  "src": "24547:286:2",
                  "trueBody": {
                    "id": 1980,
                    "nodeType": "Block",
                    "src": "24587:246:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1970,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "24656:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24656:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1972,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "24694:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24694:67:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1975,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "24791:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 1976,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "24791:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 1974,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24783:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24783:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1969,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "24624:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1978,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24624:198:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1979,
                        "nodeType": "Return",
                        "src": "24601:221:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1982,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24844:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1984,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "24844:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1985,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24858:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1986,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1838,
                          "src": "24858:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1987,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "24843:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1989,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24890:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "24890:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1991,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "24916:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1988,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "24882:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24882:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "24843:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1994,
                  "nodeType": "ExpressionStatement",
                  "src": "24843:86:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24943:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1996,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24943:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1997,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24959:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24959:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24943:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2012,
                  "nodeType": "IfStatement",
                  "src": "24939:283:2",
                  "trueBody": {
                    "id": 2011,
                    "nodeType": "Block",
                    "src": "24979:243:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2001,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "25048:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25048:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2003,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "25086:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25086:64:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2006,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "25180:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2007,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "25180:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25172:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25172:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2000,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25016:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25016:195:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2010,
                        "nodeType": "Return",
                        "src": "24993:218:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2013,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25233:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2015,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "25233:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2016,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25247:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2017,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalReservesNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1840,
                          "src": "25247:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2018,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "25232:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2021,
                              "name": "reserveFactorMantissa",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "25325:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2020,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "25310:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 2022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "25310:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2023,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25362:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2024,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "25362:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2025,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "25400:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2019,
                        "name": "mulScalarTruncateAddUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5464,
                        "src": "25272:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25272:151:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "25232:191:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2028,
                  "nodeType": "ExpressionStatement",
                  "src": "25232:191:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2029,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "25437:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "25437:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2031,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "25453:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25453:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "25437:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2046,
                  "nodeType": "IfStatement",
                  "src": "25433:284:2",
                  "trueBody": {
                    "id": 2045,
                    "nodeType": "Block",
                    "src": "25473:244:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2035,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "25542:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25542:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2037,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "25580:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25580:65:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2040,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "25675:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2041,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "25675:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25667:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25667:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2034,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25510:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25510:196:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2044,
                        "nodeType": "Return",
                        "src": "25487:219:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2047,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25728:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2049,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "25728:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25742:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2051,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "borrowIndexNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1842,
                          "src": "25742:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2052,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "25727:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2054,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25803:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2055,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "25803:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2056,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "25842:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2057,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "25867:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2053,
                        "name": "mulScalarTruncateAddUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5464,
                        "src": "25765:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25765:123:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "25727:161:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2060,
                  "nodeType": "ExpressionStatement",
                  "src": "25727:161:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2061,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "25902:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2062,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "25902:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2063,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "25918:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2064,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25918:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "25902:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2078,
                  "nodeType": "IfStatement",
                  "src": "25898:282:2",
                  "trueBody": {
                    "id": 2077,
                    "nodeType": "Block",
                    "src": "25938:242:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2067,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "26007:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2068,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "26007:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2069,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "26045:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "26045:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2072,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "26138:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2073,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "26138:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2071,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "26130:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26130:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2066,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25975:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25975:194:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2076,
                        "nodeType": "Return",
                        "src": "25952:217:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2079,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "26376:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2080,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26397:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentBlockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1830,
                      "src": "26397:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26376:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2083,
                  "nodeType": "ExpressionStatement",
                  "src": "26376:44:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2084,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "26430:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2085,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26444:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2086,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowIndexNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1842,
                      "src": "26444:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26430:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2088,
                  "nodeType": "ExpressionStatement",
                  "src": "26430:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2089,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "26473:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2090,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26488:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2091,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1838,
                      "src": "26488:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26473:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2093,
                  "nodeType": "ExpressionStatement",
                  "src": "26473:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2094,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "26518:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2095,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26534:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2096,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReservesNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1840,
                      "src": "26534:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26518:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2098,
                  "nodeType": "ExpressionStatement",
                  "src": "26518:37:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2100,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1849,
                          "src": "26632:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                            "typeString": "struct CToken.AccrueInterestLocalVars memory"
                          }
                        },
                        "id": 2101,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interestAccumulated",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1836,
                        "src": "26632:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2102,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1849,
                          "src": "26658:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                            "typeString": "struct CToken.AccrueInterestLocalVars memory"
                          }
                        },
                        "id": 2103,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "borrowIndexNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1842,
                        "src": "26658:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2104,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "26679:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2099,
                      "name": "AccrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 780,
                      "src": "26617:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 2105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26617:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2106,
                  "nodeType": "EmitStatement",
                  "src": "26612:80:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2108,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "26718:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "26718:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "26710:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26710:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1847,
                  "id": 2111,
                  "nodeType": "Return",
                  "src": "26703:30:2"
                }
              ]
            },
            "documentation": "@notice Applies accrued interest to total borrows and reserves.\n@dev This calculates interest accrued from the last checkpointed block\n     up to the current block and writes new checkpoint to storage.",
            "id": 2113,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "accrueInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1844,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22426:2:2"
            },
            "returnParameters": {
              "id": 1847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2113,
                  "src": "22445:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1845,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22445:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22444:9:2"
            },
            "scope": 4422,
            "src": "22403:4337:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2149,
              "nodeType": "Block",
              "src": "27172:458:2",
              "statements": [
                {
                  "assignments": [
                    2123
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2123,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2149,
                      "src": "27182:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2122,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27182:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2124,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "27198:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27198:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27182:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2127,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2123,
                      "src": "27228:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2129,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "27245:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "27245:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27237:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27237:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27228:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2142,
                  "nodeType": "IfStatement",
                  "src": "27224:247:2",
                  "trueBody": {
                    "id": 2141,
                    "nodeType": "Block",
                    "src": "27262:209:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2135,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2123,
                                  "src": "27412:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2134,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "27406:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27406:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2137,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "27420:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "27420:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2133,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "27401:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27401:59:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2121,
                        "id": 2140,
                        "nodeType": "Return",
                        "src": "27394:66:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2144,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "27600:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "27600:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2146,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2115,
                        "src": "27612:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2143,
                      "name": "mintFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2429,
                      "src": "27590:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27590:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2121,
                  "id": 2148,
                  "nodeType": "Return",
                  "src": "27583:40:2"
                }
              ]
            },
            "documentation": "@notice Sender supplies assets into the market and receives cTokens in exchange\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2150,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2118,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2117,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "27141:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "27141:12:2"
              }
            ],
            "name": "mintInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2115,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2150,
                  "src": "27112:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27112:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27111:20:2"
            },
            "returnParameters": {
              "id": 2121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2120,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2150,
                  "src": "27163:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27163:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27162:9:2"
            },
            "scope": 4422,
            "src": "27090:540:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.MintLocalVars",
            "id": 2163,
            "members": [
              {
                "constant": false,
                "id": 2152,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27667:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2151,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "27667:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2154,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27686:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2153,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "27686:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2156,
                "name": "exchangeRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27713:28:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2155,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27713:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2158,
                "name": "mintTokens",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27751:18:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2157,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27751:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2160,
                "name": "totalSupplyNew",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27779:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2159,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27779:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2162,
                "name": "accountTokensNew",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27811:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2161,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27811:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MintLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "27636:206:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2428,
              "nodeType": "Block",
              "src": "28344:3726:2",
              "statements": [
                {
                  "assignments": [
                    2173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2173,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2428,
                      "src": "28393:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2172,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28393:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2182,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2177,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "28443:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "28435:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28435:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2179,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "28450:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2180,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "28458:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2174,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "28411:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4641,
                      "src": "28411:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28411:58:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28393:76:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2183,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2173,
                      "src": "28483:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28494:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28483:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2195,
                  "nodeType": "IfStatement",
                  "src": "28479:138:2",
                  "trueBody": {
                    "id": 2194,
                    "nodeType": "Block",
                    "src": "28497:120:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2187,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "28529:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2188,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28529:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2189,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "28558:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28558:38:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2191,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2173,
                              "src": "28598:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2186,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "28518:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28518:88:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2193,
                        "nodeType": "Return",
                        "src": "28511:95:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2196,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "28702:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2197,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "28724:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28724:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28702:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2208,
                  "nodeType": "IfStatement",
                  "src": "28698:138:2",
                  "trueBody": {
                    "id": 2207,
                    "nodeType": "Block",
                    "src": "28742:94:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2201,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "28768:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28768:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2203,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "28792:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28792:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2200,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "28763:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28763:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2206,
                        "nodeType": "Return",
                        "src": "28756:69:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2210,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2428,
                      "src": "28846:25:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                        "typeString": "struct CToken.MintLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2209,
                        "name": "MintLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2163,
                        "src": "28846:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_storage_ptr",
                          "typeString": "struct CToken.MintLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2211,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28846:25:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2212,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "28926:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2214,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "28926:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2216,
                          "name": "minter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "28953:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2217,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "28961:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2215,
                        "name": "checkTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "28937:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) view returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28937:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "28926:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2220,
                  "nodeType": "ExpressionStatement",
                  "src": "28926:46:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 2225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2221,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "28986:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2222,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "28986:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2223,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "28998:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28998:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "28986:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2234,
                  "nodeType": "IfStatement",
                  "src": "28982:121:2",
                  "trueBody": {
                    "id": 2233,
                    "nodeType": "Block",
                    "src": "29014:89:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2227,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "29040:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2228,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2152,
                              "src": "29040:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2229,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29050:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_TRANSFER_IN_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29050:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2226,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "29035:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29035:57:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2232,
                        "nodeType": "Return",
                        "src": "29028:64:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2235,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29282:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2237,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "29282:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2238,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29296:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2239,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "exchangeRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2156,
                          "src": "29296:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2240,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29281:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2241,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "29325:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29325:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "29281:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2244,
                  "nodeType": "ExpressionStatement",
                  "src": "29281:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2245,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "29367:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2246,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "29367:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2247,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "29383:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29383:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "29367:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2262,
                  "nodeType": "IfStatement",
                  "src": "29363:167:2",
                  "trueBody": {
                    "id": 2261,
                    "nodeType": "Block",
                    "src": "29403:127:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2251,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "29435:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29435:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2253,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29453:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_EXCHANGE_RATE_READ_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29453:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2256,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "29505:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2257,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "29505:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2255,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "29497:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "29497:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2250,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "29424:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29424:95:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2260,
                        "nodeType": "Return",
                        "src": "29417:102:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2263,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29541:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "29541:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2266,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29555:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2267,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "29555:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2268,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29540:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2270,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "29610:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2272,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "29649:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2273,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateMantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2156,
                              "src": "29649:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2271,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "29634:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 2274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "29634:42:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        ],
                        "id": 2269,
                        "name": "divScalarByExpTruncate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5582,
                        "src": "29574:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29574:112:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "29540:146:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2277,
                  "nodeType": "ExpressionStatement",
                  "src": "29540:146:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2278,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "29700:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2279,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "29700:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2280,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "29716:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29716:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "29700:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2295,
                  "nodeType": "IfStatement",
                  "src": "29696:169:2",
                  "trueBody": {
                    "id": 2294,
                    "nodeType": "Block",
                    "src": "29736:129:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2284,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "29768:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29768:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2286,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29786:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2287,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_EXCHANGE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29786:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2289,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "29840:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2290,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "29840:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "29832:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "29832:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2283,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "29757:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29757:97:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2293,
                        "nodeType": "Return",
                        "src": "29750:104:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2296,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30124:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "30124:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2299,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30138:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2300,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalSupplyNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2160,
                          "src": "30138:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2301,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "30123:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2303,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 753,
                          "src": "30169:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2304,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30182:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2305,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "30182:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2302,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "30161:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30161:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "30123:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2308,
                  "nodeType": "ExpressionStatement",
                  "src": "30123:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2309,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "30212:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "30212:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "30228:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "30228:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "30212:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2326,
                  "nodeType": "IfStatement",
                  "src": "30208:271:2",
                  "trueBody": {
                    "id": 2325,
                    "nodeType": "Block",
                    "src": "30248:231:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2315,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "30317:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30317:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2317,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "30355:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30355:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2320,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "30437:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2321,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "30437:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "30429:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30429:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2314,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "30285:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30285:183:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2324,
                        "nodeType": "Return",
                        "src": "30262:206:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2327,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30490:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2329,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "30490:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2330,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30504:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2331,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountTokensNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2162,
                          "src": "30504:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2332,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "30489:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2334,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "30537:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2336,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2335,
                            "name": "minter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2165,
                            "src": "30551:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "30537:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2337,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30560:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2338,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "30560:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2333,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "30529:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30529:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "30489:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2341,
                  "nodeType": "ExpressionStatement",
                  "src": "30489:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2342,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "30590:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2343,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "30590:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2344,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "30606:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2345,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "30606:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "30590:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2359,
                  "nodeType": "IfStatement",
                  "src": "30586:274:2",
                  "trueBody": {
                    "id": 2358,
                    "nodeType": "Block",
                    "src": "30626:234:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2348,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "30695:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2349,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30695:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2350,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "30733:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30733:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2353,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "30818:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2354,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "30818:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "30810:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30810:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2347,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "30663:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30663:186:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2357,
                        "nodeType": "Return",
                        "src": "30640:209:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2360,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31390:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2362,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "31390:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2364,
                          "name": "minter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "31414:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2365,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "31422:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2363,
                        "name": "doTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4412,
                        "src": "31401:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31401:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "31390:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2368,
                  "nodeType": "ExpressionStatement",
                  "src": "31390:43:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 2373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2369,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31447:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "31447:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2371,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "31459:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "31459:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "31447:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2382,
                  "nodeType": "IfStatement",
                  "src": "31443:115:2",
                  "trueBody": {
                    "id": 2381,
                    "nodeType": "Block",
                    "src": "31475:83:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2375,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "31501:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2376,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2152,
                              "src": "31501:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2377,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "31511:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_TRANSFER_IN_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "31511:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2374,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "31496:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31496:51:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2380,
                        "nodeType": "Return",
                        "src": "31489:58:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2383,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "31633:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2384,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31647:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2160,
                      "src": "31647:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31633:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2387,
                  "nodeType": "ExpressionStatement",
                  "src": "31633:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2388,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "31676:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2390,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2389,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31690:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31676:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2391,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31700:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2392,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountTokensNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2162,
                      "src": "31700:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31676:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2394,
                  "nodeType": "ExpressionStatement",
                  "src": "31676:45:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2396,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31799:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2397,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "31807:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2398,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "31819:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2399,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "31819:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2395,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 788,
                      "src": "31794:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 2400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31794:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2401,
                  "nodeType": "EmitStatement",
                  "src": "31789:46:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2404,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "31867:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31859:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31859:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2406,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31874:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2407,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "31882:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2408,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "31882:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2402,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "31850:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31850:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2410,
                  "nodeType": "EmitStatement",
                  "src": "31845:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2415,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "31979:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31971:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31971:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31986:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2418,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "31994:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2419,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "32006:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2420,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "32006:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2411,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "31948:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4652,
                      "src": "31948:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 2421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31948:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2422,
                  "nodeType": "ExpressionStatement",
                  "src": "31948:74:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2424,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "32048:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "32048:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "32040:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32040:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2171,
                  "id": 2427,
                  "nodeType": "Return",
                  "src": "32033:30:2"
                }
              ]
            },
            "documentation": "@notice User supplies assets into the market and receives cTokens in exchange\n@dev Assumes interest has already been accrued up to the current block\n@param minter The address of the account which is supplying the assets\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2165,
                  "name": "minter",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28281:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28281:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2167,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28297:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28297:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28280:36:2"
            },
            "returnParameters": {
              "id": 2171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2170,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28335:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2169,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28335:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28334:9:2"
            },
            "scope": 4422,
            "src": "28262:3808:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2466,
              "nodeType": "Block",
              "src": "32499:445:2",
              "statements": [
                {
                  "assignments": [
                    2439
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2439,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2466,
                      "src": "32509:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2438,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32509:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2442,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2440,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "32525:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32525:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32509:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2443,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2439,
                      "src": "32555:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2445,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "32572:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "32572:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "32564:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2447,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32564:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32555:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2458,
                  "nodeType": "IfStatement",
                  "src": "32551:249:2",
                  "trueBody": {
                    "id": 2457,
                    "nodeType": "Block",
                    "src": "32589:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2451,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2439,
                                  "src": "32739:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2450,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "32733:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "32733:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2453,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "32747:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "32747:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2449,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "32728:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32728:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2437,
                        "id": 2456,
                        "nodeType": "Return",
                        "src": "32721:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2460,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "32909:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "32909:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2462,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2431,
                        "src": "32921:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32935:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 2459,
                      "name": "redeemFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2840,
                      "src": "32897:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256,uint256) returns (uint256)"
                      }
                    },
                    "id": 2464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32897:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2437,
                  "id": 2465,
                  "nodeType": "Return",
                  "src": "32890:47:2"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for the underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemTokens The number of cTokens to redeem into underlying\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2467,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2434,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2433,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "32468:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "32468:12:2"
              }
            ],
            "name": "redeemInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2431,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 2467,
                  "src": "32437:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32437:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32436:22:2"
            },
            "returnParameters": {
              "id": 2437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2436,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2467,
                  "src": "32490:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32490:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32489:9:2"
            },
            "scope": 4422,
            "src": "32413:531:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2504,
              "nodeType": "Block",
              "src": "33388:445:2",
              "statements": [
                {
                  "assignments": [
                    2477
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2477,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2504,
                      "src": "33398:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2476,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33398:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2480,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2478,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "33414:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33414:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33398:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2481,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2477,
                      "src": "33444:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2483,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "33461:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "33461:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33453:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33453:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33444:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2496,
                  "nodeType": "IfStatement",
                  "src": "33440:249:2",
                  "trueBody": {
                    "id": 2495,
                    "nodeType": "Block",
                    "src": "33478:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2489,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2477,
                                  "src": "33628:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2488,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "33622:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33622:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2491,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "33636:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "33636:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2487,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "33617:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33617:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2475,
                        "id": 2494,
                        "nodeType": "Return",
                        "src": "33610:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2498,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "33798:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "33798:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "33810:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2501,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2469,
                        "src": "33813:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2497,
                      "name": "redeemFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2840,
                      "src": "33786:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256,uint256) returns (uint256)"
                      }
                    },
                    "id": 2502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33786:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2475,
                  "id": 2503,
                  "nodeType": "Return",
                  "src": "33779:47:2"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemAmount The amount of underlying to redeem\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2505,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2472,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2471,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "33357:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "33357:12:2"
              }
            ],
            "name": "redeemUnderlyingInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2469,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2505,
                  "src": "33326:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2468,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33326:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33325:22:2"
            },
            "returnParameters": {
              "id": 2475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2474,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2505,
                  "src": "33379:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33379:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33378:9:2"
            },
            "scope": 4422,
            "src": "33292:541:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.RedeemLocalVars",
            "id": 2520,
            "members": [
              {
                "constant": false,
                "id": 2507,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33872:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2506,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "33872:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2509,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33891:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2508,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "33891:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2511,
                "name": "exchangeRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33918:28:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2510,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33918:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2513,
                "name": "redeemTokens",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33956:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2512,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33956:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2515,
                "name": "redeemAmount",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33986:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2514,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33986:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2517,
                "name": "totalSupplyNew",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "34016:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2516,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "34016:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2519,
                "name": "accountTokensNew",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "34048:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2518,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "34048:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RedeemLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "33839:240:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2839,
              "nodeType": "Block",
              "src": "34833:5052:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2532,
                            "name": "redeemTokensIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2524,
                            "src": "34851:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34869:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "34851:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2535,
                            "name": "redeemAmountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2526,
                            "src": "34874:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34892:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "34874:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "34851:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416d6f756e74496e206d757374206265207a65726f",
                        "id": 2539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "34895:54:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2",
                          "typeString": "literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""
                        },
                        "value": "one of redeemTokensIn or redeemAmountIn must be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2",
                          "typeString": "literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""
                        }
                      ],
                      "id": 2531,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "34843:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34843:107:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2541,
                  "nodeType": "ExpressionStatement",
                  "src": "34843:107:2"
                },
                {
                  "assignments": [
                    2543
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2543,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "34961:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                        "typeString": "struct CToken.RedeemLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2542,
                        "name": "RedeemLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2520,
                        "src": "34961:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_storage_ptr",
                          "typeString": "struct CToken.RedeemLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2544,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34961:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2545,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "35059:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2547,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "35059:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2548,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "35073:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2549,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "exchangeRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2511,
                          "src": "35073:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2550,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "35058:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2551,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "35102:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35102:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "35058:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2554,
                  "nodeType": "ExpressionStatement",
                  "src": "35058:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2555,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "35144:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "35144:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2557,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "35160:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "35160:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "35144:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2572,
                  "nodeType": "IfStatement",
                  "src": "35140:169:2",
                  "trueBody": {
                    "id": 2571,
                    "nodeType": "Block",
                    "src": "35180:129:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2561,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "35212:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "35212:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2563,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "35230:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_EXCHANGE_RATE_READ_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "35230:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2566,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "35284:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2567,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "35284:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "35276:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2568,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "35276:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2560,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "35201:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35201:97:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2570,
                        "nodeType": "Return",
                        "src": "35194:104:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2573,
                      "name": "redeemTokensIn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2524,
                      "src": "35360:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "35377:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "35360:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2655,
                    "nodeType": "Block",
                    "src": "36168:779:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2616,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "36411:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2618,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "mathErr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2509,
                                "src": "36411:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2619,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "36425:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2620,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "redeemTokens",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2513,
                                "src": "36425:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2621,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "36410:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2623,
                                "name": "redeemAmountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2526,
                                "src": "36486:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2625,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2543,
                                      "src": "36533:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                        "typeString": "struct CToken.RedeemLocalVars memory"
                                      }
                                    },
                                    "id": 2626,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "exchangeRateMantissa",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2511,
                                    "src": "36533:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2624,
                                  "name": "Exp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5226,
                                  "src": "36518:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                    "typeString": "type(struct Exponential.Exp storage pointer)"
                                  }
                                },
                                "id": 2627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "mantissa"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "36518:42:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              ],
                              "id": 2622,
                              "name": "divScalarByExpTruncate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5582,
                              "src": "36446:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 2628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "36446:128:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "36410:164:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2630,
                        "nodeType": "ExpressionStatement",
                        "src": "36410:164:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 2635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2631,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "36592:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2632,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mathErr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2509,
                            "src": "36592:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2633,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "36608:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 2634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "36608:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "36592:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2648,
                        "nodeType": "IfStatement",
                        "src": "36588:300:2",
                        "trueBody": {
                          "id": 2647,
                          "nodeType": "Block",
                          "src": "36628:260:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2637,
                                      "name": "Error",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5069,
                                      "src": "36709:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                        "typeString": "type(enum TokenErrorReporter.Error)"
                                      }
                                    },
                                    "id": 2638,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MATH_ERROR",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36709:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2639,
                                      "name": "FailureInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5148,
                                      "src": "36751:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                        "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                      }
                                    },
                                    "id": 2640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36751:53:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2642,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2543,
                                          "src": "36838:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                            "typeString": "struct CToken.RedeemLocalVars memory"
                                          }
                                        },
                                        "id": 2643,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mathErr",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2509,
                                        "src": "36838:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      ],
                                      "id": 2641,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "36830:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 2644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "36830:21:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2636,
                                  "name": "failOpaque",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5206,
                                  "src": "36673:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                                  }
                                },
                                "id": 2645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "36673:200:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2530,
                              "id": 2646,
                              "nodeType": "Return",
                              "src": "36646:227:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2649,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "36902:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2651,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "redeemAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2515,
                            "src": "36902:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2652,
                            "name": "redeemAmountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2526,
                            "src": "36922:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "36902:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2654,
                        "nodeType": "ExpressionStatement",
                        "src": "36902:34:2"
                      }
                    ]
                  },
                  "id": 2656,
                  "nodeType": "IfStatement",
                  "src": "35356:1591:2",
                  "trueBody": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "35380:782:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2576,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "35630:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2578,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "redeemTokens",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2513,
                            "src": "35630:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2579,
                            "name": "redeemTokensIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2524,
                            "src": "35650:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "35630:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2581,
                        "nodeType": "ExpressionStatement",
                        "src": "35630:34:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2582,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "35680:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2584,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "mathErr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2509,
                                "src": "35680:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2585,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "35694:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2586,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "redeemAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2515,
                                "src": "35694:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2587,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "35679:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2590,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2543,
                                      "src": "35765:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                        "typeString": "struct CToken.RedeemLocalVars memory"
                                      }
                                    },
                                    "id": 2591,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "exchangeRateMantissa",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2511,
                                    "src": "35765:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2589,
                                  "name": "Exp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5226,
                                  "src": "35750:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                    "typeString": "type(struct Exponential.Exp storage pointer)"
                                  }
                                },
                                "id": 2592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "mantissa"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "35750:42:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 2593,
                                "name": "redeemTokensIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2524,
                                "src": "35810:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2588,
                              "name": "mulScalarTruncate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5424,
                              "src": "35715:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 2594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35715:123:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "35679:159:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2596,
                        "nodeType": "ExpressionStatement",
                        "src": "35679:159:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 2601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2597,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "35856:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2598,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mathErr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2509,
                            "src": "35856:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2599,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "35872:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 2600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "35872:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "35856:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2614,
                        "nodeType": "IfStatement",
                        "src": "35852:300:2",
                        "trueBody": {
                          "id": 2613,
                          "nodeType": "Block",
                          "src": "35892:260:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2603,
                                      "name": "Error",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5069,
                                      "src": "35973:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                        "typeString": "type(enum TokenErrorReporter.Error)"
                                      }
                                    },
                                    "id": 2604,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MATH_ERROR",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "35973:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2605,
                                      "name": "FailureInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5148,
                                      "src": "36015:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                        "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                      }
                                    },
                                    "id": 2606,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36015:53:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2608,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2543,
                                          "src": "36102:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                            "typeString": "struct CToken.RedeemLocalVars memory"
                                          }
                                        },
                                        "id": 2609,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mathErr",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2509,
                                        "src": "36102:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      ],
                                      "id": 2607,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "36094:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 2610,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "36094:21:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2602,
                                  "name": "failOpaque",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5206,
                                  "src": "35937:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                                  }
                                },
                                "id": 2611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "35937:200:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2530,
                              "id": 2612,
                              "nodeType": "Return",
                              "src": "35910:227:2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2658
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2658,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "36998:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2657,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36998:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2668,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2662,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "37050:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "37042:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "37042:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2664,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "37057:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2665,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "37067:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2666,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "37067:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2659,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "37016:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4663,
                      "src": "37016:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37016:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36998:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2669,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2658,
                      "src": "37099:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "37110:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "37099:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2681,
                  "nodeType": "IfStatement",
                  "src": "37095:140:2",
                  "trueBody": {
                    "id": 2680,
                    "nodeType": "Block",
                    "src": "37113:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2673,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37145:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37145:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2675,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37174:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37174:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2677,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2658,
                              "src": "37216:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2672,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "37134:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37134:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2679,
                        "nodeType": "Return",
                        "src": "37127:97:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2682,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "37320:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2683,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "37342:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37342:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37320:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2694,
                  "nodeType": "IfStatement",
                  "src": "37316:140:2",
                  "trueBody": {
                    "id": 2693,
                    "nodeType": "Block",
                    "src": "37360:96:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2687,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37386:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37386:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2689,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37410:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37410:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2686,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "37381:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37381:64:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2692,
                        "nodeType": "Return",
                        "src": "37374:71:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2695,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37707:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2697,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "37707:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2698,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37721:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2699,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalSupplyNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2517,
                          "src": "37721:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2700,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "37706:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2702,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 753,
                          "src": "37752:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2703,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37765:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2704,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2513,
                          "src": "37765:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2701,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "37744:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2705,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37744:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "37706:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2707,
                  "nodeType": "ExpressionStatement",
                  "src": "37706:77:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2708,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "37797:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2709,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "37797:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2710,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "37813:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "37813:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "37797:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2725,
                  "nodeType": "IfStatement",
                  "src": "37793:273:2",
                  "trueBody": {
                    "id": 2724,
                    "nodeType": "Block",
                    "src": "37833:233:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2714,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37902:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37902:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2716,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37940:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37940:54:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2719,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "38024:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2720,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "38024:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38016:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38016:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2713,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "37870:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37870:185:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2723,
                        "nodeType": "Return",
                        "src": "37847:208:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2726,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38077:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2728,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "38077:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2729,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38091:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2730,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountTokensNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2519,
                          "src": "38091:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2731,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "38076:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2733,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "38124:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2735,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2734,
                            "name": "redeemer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2522,
                            "src": "38138:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "38124:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2736,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38149:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2513,
                          "src": "38149:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2732,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "38116:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38116:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "38076:91:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2740,
                  "nodeType": "ExpressionStatement",
                  "src": "38076:91:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2741,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "38181:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "38181:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "38197:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "38197:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "38181:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2758,
                  "nodeType": "IfStatement",
                  "src": "38177:276:2",
                  "trueBody": {
                    "id": 2757,
                    "nodeType": "Block",
                    "src": "38217:236:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2747,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "38286:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2748,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38286:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2749,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "38324:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38324:57:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2752,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "38411:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2753,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "38411:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2751,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38403:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2754,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38403:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2746,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "38254:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38254:188:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2756,
                        "nodeType": "Return",
                        "src": "38231:211:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2759,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "38531:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38531:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2761,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "38548:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2762,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2515,
                      "src": "38548:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "38531:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2772,
                  "nodeType": "IfStatement",
                  "src": "38527:153:2",
                  "trueBody": {
                    "id": 2771,
                    "nodeType": "Block",
                    "src": "38567:113:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2765,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "38593:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38593:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2767,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "38624:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_TRANSFER_OUT_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38624:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2764,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "38588:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38588:81:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2770,
                        "nodeType": "Return",
                        "src": "38581:88:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2773,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39210:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2775,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2507,
                      "src": "39210:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2777,
                          "name": "redeemer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2522,
                          "src": "39235:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2778,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "39245:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2779,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2515,
                          "src": "39245:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2776,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "39221:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "39221:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "39210:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2782,
                  "nodeType": "ExpressionStatement",
                  "src": "39210:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 2788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2784,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "39281:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2785,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2507,
                          "src": "39281:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2786,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "39293:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "39293:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "39281:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72656465656d207472616e73666572206f7574206661696c6564",
                        "id": 2789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "39309:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c505aa80a420a38d944c055f3a05a2359dd43f08149497562ed32909f93e49be",
                          "typeString": "literal_string \"redeem transfer out failed\""
                        },
                        "value": "redeem transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c505aa80a420a38d944c055f3a05a2359dd43f08149497562ed32909f93e49be",
                          "typeString": "literal_string \"redeem transfer out failed\""
                        }
                      ],
                      "id": 2783,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "39273:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39273:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2791,
                  "nodeType": "ExpressionStatement",
                  "src": "39273:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2792,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "39414:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2793,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39428:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2794,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2517,
                      "src": "39428:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39414:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2796,
                  "nodeType": "ExpressionStatement",
                  "src": "39414:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2797,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "39457:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2799,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2798,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39471:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "39457:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2800,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39483:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2801,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountTokensNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2519,
                      "src": "39483:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39457:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2803,
                  "nodeType": "ExpressionStatement",
                  "src": "39457:47:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2805,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39588:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2807,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "39606:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "39598:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39598:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2809,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39613:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2810,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39613:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2804,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "39579:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39579:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2812,
                  "nodeType": "EmitStatement",
                  "src": "39574:57:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2814,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39653:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2815,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39663:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2816,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2515,
                        "src": "39663:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2817,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39682:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2818,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39682:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2813,
                      "name": "Redeem",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 796,
                      "src": "39646:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 2819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39646:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2820,
                  "nodeType": "EmitStatement",
                  "src": "39641:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2825,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "39783:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "39775:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39775:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2827,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39790:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2828,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39800:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2829,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2515,
                        "src": "39800:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2830,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39819:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2831,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39819:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2821,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "39750:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4674,
                      "src": "39750:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 2832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39750:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2833,
                  "nodeType": "ExpressionStatement",
                  "src": "39750:87:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2835,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "39863:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "39863:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "39855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39855:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2530,
                  "id": 2838,
                  "nodeType": "Return",
                  "src": "39848:30:2"
                }
              ]
            },
            "documentation": "@notice User redeems cTokens in exchange for the underlying asset\n@dev Assumes interest has already been accrued up to the current block\n@param redeemer The address of the account which is redeeming the tokens\n@param redeemTokensIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n@param redeemAmountIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2840,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2527,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2522,
                  "name": "redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34712:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34712:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2524,
                  "name": "redeemTokensIn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34738:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34738:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2526,
                  "name": "redeemAmountIn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34762:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2525,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34762:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34711:74:2"
            },
            "returnParameters": {
              "id": 2530,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2529,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34820:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34820:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34819:9:2"
            },
            "scope": 4422,
            "src": "34691:5194:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2876,
              "nodeType": "Block",
              "src": "40232:442:2",
              "statements": [
                {
                  "assignments": [
                    2850
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2850,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2876,
                      "src": "40242:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2849,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "40242:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2853,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2851,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "40258:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "40258:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40242:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2854,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2850,
                      "src": "40288:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2856,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "40305:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "40305:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "40297:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "40297:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "40288:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2869,
                  "nodeType": "IfStatement",
                  "src": "40284:249:2",
                  "trueBody": {
                    "id": 2868,
                    "nodeType": "Block",
                    "src": "40322:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2862,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2850,
                                  "src": "40472:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2861,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "40466:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40466:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2864,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "40480:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2865,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "40480:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2860,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "40461:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40461:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2848,
                        "id": 2867,
                        "nodeType": "Return",
                        "src": "40454:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2871,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "40642:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "40642:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2873,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2842,
                        "src": "40654:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2870,
                      "name": "borrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3103,
                      "src": "40630:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256) returns (uint256)"
                      }
                    },
                    "id": 2874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "40630:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2848,
                  "id": 2875,
                  "nodeType": "Return",
                  "src": "40623:44:2"
                }
              ]
            },
            "documentation": "@notice Sender borrows assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2877,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2845,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2844,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "40201:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "40201:12:2"
              }
            ],
            "name": "borrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2842,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2877,
                  "src": "40170:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40170:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "40169:22:2"
            },
            "returnParameters": {
              "id": 2848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2847,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2877,
                  "src": "40223:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40223:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "40222:9:2"
            },
            "scope": 4422,
            "src": "40146:528:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.BorrowLocalVars",
            "id": 2888,
            "members": [
              {
                "constant": false,
                "id": 2879,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40713:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2878,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "40713:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2881,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40732:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2880,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "40732:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2883,
                "name": "accountBorrows",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40759:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2882,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40759:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2885,
                "name": "accountBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40791:25:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2884,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40791:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2887,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40826:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2886,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40826:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BorrowLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "40680:176:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 3102,
              "nodeType": "Block",
              "src": "41211:3310:2",
              "statements": [
                {
                  "assignments": [
                    2898
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2898,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3102,
                      "src": "41262:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2897,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "41262:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2907,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2902,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "41314:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "41306:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "41306:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2904,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "41321:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2905,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "41331:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2899,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "41280:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4685,
                      "src": "41280:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "41280:64:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "41262:82:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2908,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2898,
                      "src": "41358:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "41369:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "41358:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2920,
                  "nodeType": "IfStatement",
                  "src": "41354:140:2",
                  "trueBody": {
                    "id": 2919,
                    "nodeType": "Block",
                    "src": "41372:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2912,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41404:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41404:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2914,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41433:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2915,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41433:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2916,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2898,
                              "src": "41475:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2911,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "41393:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41393:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2918,
                        "nodeType": "Return",
                        "src": "41386:97:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2921,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "41579:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2922,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "41601:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "41601:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41579:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2933,
                  "nodeType": "IfStatement",
                  "src": "41575:140:2",
                  "trueBody": {
                    "id": 2932,
                    "nodeType": "Block",
                    "src": "41619:96:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2926,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41645:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41645:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2928,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41669:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41669:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2925,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "41640:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41640:64:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2931,
                        "nodeType": "Return",
                        "src": "41633:71:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2934,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "41804:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "41804:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2936,
                      "name": "borrowAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2892,
                      "src": "41821:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41804:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2946,
                  "nodeType": "IfStatement",
                  "src": "41800:141:2",
                  "trueBody": {
                    "id": 2945,
                    "nodeType": "Block",
                    "src": "41835:106:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2939,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41861:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41861:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2941,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41892:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_CASH_NOT_AVAILABLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41892:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2938,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "41856:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41856:74:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2944,
                        "nodeType": "Return",
                        "src": "41849:81:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2948,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 3102,
                      "src": "41951:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                        "typeString": "struct CToken.BorrowLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2947,
                        "name": "BorrowLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2888,
                        "src": "41951:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_storage_ptr",
                          "typeString": "struct CToken.BorrowLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2949,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "41951:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2950,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42222:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2952,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42222:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2953,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42236:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2954,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2883,
                          "src": "42236:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2955,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42221:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2957,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "42287:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 2956,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "42259:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "42259:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42221:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2960,
                  "nodeType": "ExpressionStatement",
                  "src": "42221:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2961,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "42310:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 2962,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "42310:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2963,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "42326:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "42326:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "42310:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2978,
                  "nodeType": "IfStatement",
                  "src": "42306:276:2",
                  "trueBody": {
                    "id": 2977,
                    "nodeType": "Block",
                    "src": "42346:236:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2967,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "42415:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42415:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2969,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "42453:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42453:57:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2972,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "42540:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 2973,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "42540:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42532:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2974,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42532:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2966,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "42383:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42383:188:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2976,
                        "nodeType": "Return",
                        "src": "42360:211:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2979,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42593:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2981,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42593:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2982,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42607:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2983,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2885,
                          "src": "42607:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2984,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42592:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2986,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42641:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2987,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2883,
                          "src": "42641:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2988,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "42662:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2985,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "42633:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "42633:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42592:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2991,
                  "nodeType": "ExpressionStatement",
                  "src": "42592:83:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2992,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "42689:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 2993,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "42689:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2994,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "42705:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "42705:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "42689:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3009,
                  "nodeType": "IfStatement",
                  "src": "42685:283:2",
                  "trueBody": {
                    "id": 3008,
                    "nodeType": "Block",
                    "src": "42725:243:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2998,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "42794:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42794:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3000,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "42832:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42832:64:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3003,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "42926:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3004,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "42926:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42918:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3005,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42918:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2997,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "42762:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42762:195:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 3007,
                        "nodeType": "Return",
                        "src": "42739:218:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3010,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42979:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3012,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42979:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3013,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42993:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3014,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "42993:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3015,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42978:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3017,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "43025:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3018,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "43039:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3016,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "43017:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43017:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42978:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3021,
                  "nodeType": "ExpressionStatement",
                  "src": "42978:74:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3022,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "43066:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3023,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "43066:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3024,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "43082:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3025,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "43082:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "43066:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3039,
                  "nodeType": "IfStatement",
                  "src": "43062:274:2",
                  "trueBody": {
                    "id": 3038,
                    "nodeType": "Block",
                    "src": "43102:234:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3028,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "43171:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "43171:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3030,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "43209:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3031,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "43209:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3033,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "43294:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3034,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "43294:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "43286:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "43286:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3027,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "43139:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43139:186:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 3037,
                        "nodeType": "Return",
                        "src": "43116:209:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3040,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "43862:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3042,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2879,
                      "src": "43862:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3044,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "43887:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3045,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "43897:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3043,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "43873:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43873:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "43862:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3048,
                  "nodeType": "ExpressionStatement",
                  "src": "43862:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 3054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3050,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "43928:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3051,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2879,
                          "src": "43928:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3052,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "43940:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "43940:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "43928:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f77207472616e73666572206f7574206661696c6564",
                        "id": 3055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "43956:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_13b0b45622e2392dd38da6433a1b8840f57181a94c7f428896d6f3061de90c3f",
                          "typeString": "literal_string \"borrow transfer out failed\""
                        },
                        "value": "borrow transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_13b0b45622e2392dd38da6433a1b8840f57181a94c7f428896d6f3061de90c3f",
                          "typeString": "literal_string \"borrow transfer out failed\""
                        }
                      ],
                      "id": 3049,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "43920:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "43920:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3057,
                  "nodeType": "ExpressionStatement",
                  "src": "43920:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3058,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "44065:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3060,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3059,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "44080:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "44065:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3061,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "44065:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3062,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "44102:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3063,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2885,
                      "src": "44102:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44065:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3065,
                  "nodeType": "ExpressionStatement",
                  "src": "44065:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3066,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "44134:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3068,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3067,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "44149:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "44134:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3069,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "44134:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3070,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "44175:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44134:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3072,
                  "nodeType": "ExpressionStatement",
                  "src": "44134:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3073,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "44196:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3074,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "44211:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2887,
                      "src": "44211:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44196:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3077,
                  "nodeType": "ExpressionStatement",
                  "src": "44196:35:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3079,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "44291:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3080,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "44301:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3081,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2948,
                          "src": "44315:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                            "typeString": "struct CToken.BorrowLocalVars memory"
                          }
                        },
                        "id": 3082,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2885,
                        "src": "44315:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3083,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2948,
                          "src": "44339:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                            "typeString": "struct CToken.BorrowLocalVars memory"
                          }
                        },
                        "id": 3084,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2887,
                        "src": "44339:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3078,
                      "name": "Borrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 806,
                      "src": "44284:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 3085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44284:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3086,
                  "nodeType": "EmitStatement",
                  "src": "44279:81:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3091,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "44443:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "44435:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3092,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "44435:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3093,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "44450:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3094,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "44460:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3087,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "44410:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3089,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4694,
                      "src": "44410:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 3095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44410:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3096,
                  "nodeType": "ExpressionStatement",
                  "src": "44410:63:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3098,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "44499:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "44499:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "44491:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44491:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2896,
                  "id": 3101,
                  "nodeType": "Return",
                  "src": "44484:30:2"
                }
              ]
            },
            "documentation": "@notice Users borrow assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3103,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2890,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41136:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "41136:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2892,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41162:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41162:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "41135:48:2"
            },
            "returnParameters": {
              "id": 2896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2895,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41202:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2894,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41202:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "41201:9:2"
            },
            "scope": 4422,
            "src": "41115:3406:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3141,
              "nodeType": "Block",
              "src": "44812:475:2",
              "statements": [
                {
                  "assignments": [
                    3113
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3113,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3141,
                      "src": "44822:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3112,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "44822:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3116,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3114,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "44838:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44838:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "44822:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3117,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3113,
                      "src": "44868:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3119,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "44885:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "44885:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "44877:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "44877:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44868:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3132,
                  "nodeType": "IfStatement",
                  "src": "44864:255:2",
                  "trueBody": {
                    "id": 3131,
                    "nodeType": "Block",
                    "src": "44902:217:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3125,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3113,
                                  "src": "45052:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3124,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "45046:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "45046:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3127,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "45060:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3128,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "45060:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3123,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "45041:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45041:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3111,
                        "id": 3130,
                        "nodeType": "Return",
                        "src": "45034:74:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3134,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "45244:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "45244:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3136,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "45256:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3137,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "45256:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3138,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3105,
                        "src": "45268:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3133,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "45227:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "45227:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3111,
                  "id": 3140,
                  "nodeType": "Return",
                  "src": "45220:60:2"
                }
              ]
            },
            "documentation": "@notice Sender repays their own borrow\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3142,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3108,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3107,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "44781:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "44781:12:2"
              }
            ],
            "name": "repayBorrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3105,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3142,
                  "src": "44751:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44751:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "44750:21:2"
            },
            "returnParameters": {
              "id": 3111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3110,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3142,
                  "src": "44803:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44803:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "44802:9:2"
            },
            "scope": 4422,
            "src": "44722:565:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3181,
              "nodeType": "Block",
              "src": "45681:473:2",
              "statements": [
                {
                  "assignments": [
                    3154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3154,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3181,
                      "src": "45691:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "45691:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3157,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3155,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "45707:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "45707:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "45691:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3158,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3154,
                      "src": "45737:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3160,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "45754:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "45754:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "45746:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "45746:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "45737:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3173,
                  "nodeType": "IfStatement",
                  "src": "45733:255:2",
                  "trueBody": {
                    "id": 3172,
                    "nodeType": "Block",
                    "src": "45771:217:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3166,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3154,
                                  "src": "45921:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3165,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "45915:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "45915:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3168,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "45929:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3169,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BEHALF_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "45929:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3164,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "45910:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45910:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3152,
                        "id": 3171,
                        "nodeType": "Return",
                        "src": "45903:74:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3175,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "46113:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "46113:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3177,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3144,
                        "src": "46125:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3178,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3146,
                        "src": "46135:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3174,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "46096:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "46096:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3152,
                  "id": 3180,
                  "nodeType": "Return",
                  "src": "46089:58:2"
                }
              ]
            },
            "documentation": "@notice Sender repays a borrow belonging to borrower\n@param borrower the account with the debt being payed off\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3182,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3149,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3148,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "45650:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "45650:12:2"
              }
            ],
            "name": "repayBorrowBehalfInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3144,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45602:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45602:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3146,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45620:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45620:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "45601:39:2"
            },
            "returnParameters": {
              "id": 3152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45672:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45672:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "45671:9:2"
            },
            "scope": 4422,
            "src": "45567:587:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.RepayBorrowLocalVars",
            "id": 3197,
            "members": [
              {
                "constant": false,
                "id": 3184,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46198:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3183,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "46198:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3186,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46217:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3185,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "46217:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3188,
                "name": "repayAmount",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46244:19:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3187,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46244:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3190,
                "name": "borrowerIndex",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46273:21:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3189,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46273:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3192,
                "name": "accountBorrows",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46304:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3191,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46304:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3194,
                "name": "accountBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46336:25:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3193,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46336:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3196,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46371:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3195,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46371:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RepayBorrowLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "46160:241:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 3465,
              "nodeType": "Block",
              "src": "46884:3912:2",
              "statements": [
                {
                  "assignments": [
                    3209
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3209,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3465,
                      "src": "46940:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3208,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "46940:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3219,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3213,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "46997:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "46989:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "46989:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3215,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "47004:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3216,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "47011:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3217,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3203,
                        "src": "47021:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3210,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "46958:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repayBorrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4707,
                      "src": "46958:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "46958:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "46940:93:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3220,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3209,
                      "src": "47047:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3221,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "47058:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "47047:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3232,
                  "nodeType": "IfStatement",
                  "src": "47043:146:2",
                  "trueBody": {
                    "id": 3231,
                    "nodeType": "Block",
                    "src": "47061:128:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3224,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47093:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47093:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3226,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47122:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3227,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47122:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3228,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3209,
                              "src": "47170:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3223,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "47082:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47082:96:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3230,
                        "nodeType": "Return",
                        "src": "47075:103:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3233,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "47274:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3234,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "47296:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47296:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "47274:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3245,
                  "nodeType": "IfStatement",
                  "src": "47270:146:2",
                  "trueBody": {
                    "id": 3244,
                    "nodeType": "Block",
                    "src": "47314:102:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3238,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47340:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47340:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3240,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47364:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47364:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3237,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "47335:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47335:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3243,
                        "nodeType": "Return",
                        "src": "47328:77:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3247,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 3465,
                      "src": "47426:32:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                        "typeString": "struct CToken.RepayBorrowLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3246,
                        "name": "RepayBorrowLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3197,
                        "src": "47426:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_storage_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3248,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "47426:32:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3249,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "47548:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3251,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "borrowerIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3190,
                      "src": "47548:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3252,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "47569:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3254,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3253,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "47584:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "47569:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3255,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "47569:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "47548:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3257,
                  "nodeType": "ExpressionStatement",
                  "src": "47548:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3258,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "47698:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3260,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "47698:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3261,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "47712:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3262,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3192,
                          "src": "47712:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3263,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "47697:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3265,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "47763:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3264,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "47735:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47735:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "47697:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3268,
                  "nodeType": "ExpressionStatement",
                  "src": "47697:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3269,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "47786:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3270,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "47786:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3271,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "47802:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "47802:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "47786:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3286,
                  "nodeType": "IfStatement",
                  "src": "47782:282:2",
                  "trueBody": {
                    "id": 3285,
                    "nodeType": "Block",
                    "src": "47822:242:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3275,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47891:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47891:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3277,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47929:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47929:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3280,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "48022:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3281,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "48022:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "48014:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "48014:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3274,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "47859:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47859:194:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3284,
                        "nodeType": "Return",
                        "src": "47836:217:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3287,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3203,
                      "src": "48143:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "48166:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "48167:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 3288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "48158:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48158:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "48143:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3307,
                    "nodeType": "Block",
                    "src": "48240:55:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3301,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48254:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3303,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repayAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3188,
                            "src": "48254:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3304,
                            "name": "repayAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3203,
                            "src": "48273:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48254:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3306,
                        "nodeType": "ExpressionStatement",
                        "src": "48254:30:2"
                      }
                    ]
                  },
                  "id": 3308,
                  "nodeType": "IfStatement",
                  "src": "48139:156:2",
                  "trueBody": {
                    "id": 3300,
                    "nodeType": "Block",
                    "src": "48171:63:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3293,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48185:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3295,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repayAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3188,
                            "src": "48185:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3296,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48204:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3297,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "accountBorrows",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3192,
                            "src": "48204:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48185:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3299,
                        "nodeType": "ExpressionStatement",
                        "src": "48185:38:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3309,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48349:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3311,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "48349:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3313,
                          "name": "payer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3199,
                          "src": "48376:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3314,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48383:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3315,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "48383:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3312,
                        "name": "checkTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "48360:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) view returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48360:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "48349:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3318,
                  "nodeType": "ExpressionStatement",
                  "src": "48349:51:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 3323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3319,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48414:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3320,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "48414:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3321,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "48426:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "48426:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "48414:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3332,
                  "nodeType": "IfStatement",
                  "src": "48410:129:2",
                  "trueBody": {
                    "id": 3331,
                    "nodeType": "Block",
                    "src": "48442:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3325,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3247,
                                "src": "48468:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                  "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                }
                              },
                              "id": 3326,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3184,
                              "src": "48468:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3327,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "48478:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "48478:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3324,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "48463:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48463:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3330,
                        "nodeType": "Return",
                        "src": "48456:72:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3333,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48781:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3335,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "48781:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3336,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48795:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3337,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3194,
                          "src": "48795:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3338,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "48780:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3340,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48829:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3341,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3192,
                          "src": "48829:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3342,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48850:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3343,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "48850:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3339,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "48821:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48821:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "48780:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3346,
                  "nodeType": "ExpressionStatement",
                  "src": "48780:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3347,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48881:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3348,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "48881:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3349,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "48897:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "48897:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "48881:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3364,
                  "nodeType": "IfStatement",
                  "src": "48877:289:2",
                  "trueBody": {
                    "id": 3363,
                    "nodeType": "Block",
                    "src": "48917:249:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3353,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "48986:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "48986:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3355,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "49024:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49024:70:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3358,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "49124:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3359,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "49124:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "49116:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49116:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3352,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "48954:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48954:201:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3362,
                        "nodeType": "Return",
                        "src": "48931:224:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3365,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49177:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3367,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "49177:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3368,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49191:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3369,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3196,
                          "src": "49191:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3370,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "49176:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3372,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "49223:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3373,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49237:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3374,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "49237:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3371,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "49215:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "49215:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "49176:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3377,
                  "nodeType": "ExpressionStatement",
                  "src": "49176:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3382,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3378,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "49268:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "49268:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3380,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "49284:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3381,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "49284:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "49268:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3395,
                  "nodeType": "IfStatement",
                  "src": "49264:280:2",
                  "trueBody": {
                    "id": 3394,
                    "nodeType": "Block",
                    "src": "49304:240:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3384,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "49373:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49373:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3386,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "49411:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3387,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49411:61:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3389,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "49502:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3390,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "49502:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3388,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "49494:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49494:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3383,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "49341:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49341:192:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3393,
                        "nodeType": "Return",
                        "src": "49318:215:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3396,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50075:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3398,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "50075:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3400,
                          "name": "payer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3199,
                          "src": "50099:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3401,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "50106:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3402,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "50106:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3399,
                        "name": "doTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4412,
                        "src": "50086:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "50086:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "50075:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3405,
                  "nodeType": "ExpressionStatement",
                  "src": "50075:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 3411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3407,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "50141:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3408,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3184,
                          "src": "50141:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3409,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "50153:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "50153:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "50141:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726570617920626f72726f77207472616e7366657220696e206661696c6564",
                        "id": 3412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "50169:33:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29884c85cf9dc205de171c8fe8461a00dea3deba5a78a2f43609feec2de30288",
                          "typeString": "literal_string \"repay borrow transfer in failed\""
                        },
                        "value": "repay borrow transfer in failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29884c85cf9dc205de171c8fe8461a00dea3deba5a78a2f43609feec2de30288",
                          "typeString": "literal_string \"repay borrow transfer in failed\""
                        }
                      ],
                      "id": 3406,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "50133:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50133:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3414,
                  "nodeType": "ExpressionStatement",
                  "src": "50133:70:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3415,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "50283:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3417,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3416,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "50298:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "50283:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3418,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "50283:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3419,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50320:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3420,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3194,
                      "src": "50320:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50283:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3422,
                  "nodeType": "ExpressionStatement",
                  "src": "50283:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3423,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "50352:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3425,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3424,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "50367:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "50352:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "50352:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3427,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "50393:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50352:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3429,
                  "nodeType": "ExpressionStatement",
                  "src": "50352:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3430,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "50414:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3431,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50429:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3432,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3196,
                      "src": "50429:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50414:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3434,
                  "nodeType": "ExpressionStatement",
                  "src": "50414:35:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3436,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "50519:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3437,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "50526:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3438,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50536:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repayAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3188,
                        "src": "50536:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3440,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50554:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3441,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3194,
                        "src": "50554:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3442,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50578:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3196,
                        "src": "50578:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3435,
                      "name": "RepayBorrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 818,
                      "src": "50507:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 3444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50507:92:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3445,
                  "nodeType": "EmitStatement",
                  "src": "50502:97:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3450,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "50687:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "50679:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "50679:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3452,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "50694:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3453,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "50701:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3454,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50711:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3455,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repayAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3188,
                        "src": "50711:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3456,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50729:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3457,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "borrowerIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3190,
                        "src": "50729:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3446,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "50649:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repayBorrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4720,
                      "src": "50649:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256) external"
                      }
                    },
                    "id": 3458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50649:99:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3459,
                  "nodeType": "ExpressionStatement",
                  "src": "50649:99:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3461,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "50774:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "50774:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "50766:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50766:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3207,
                  "id": 3464,
                  "nodeType": "Return",
                  "src": "50759:30:2"
                }
              ]
            },
            "documentation": "@notice Borrows are repaid by another user (possibly the borrower).\n@param payer the account paying off the borrow\n@param borrower the account with the debt being payed off\n@param repayAmount the amount of undelrying tokens being returned\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3466,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3199,
                  "name": "payer",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46803:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "46803:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3201,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46818:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "46818:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3203,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46836:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3202,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "46836:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "46802:54:2"
            },
            "returnParameters": {
              "id": 3207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3206,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46875:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "46875:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "46874:9:2"
            },
            "scope": 4422,
            "src": "46777:4019:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3530,
              "nodeType": "Block",
              "src": "51433:832:2",
              "statements": [
                {
                  "assignments": [
                    3480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3480,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3530,
                      "src": "51443:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3479,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "51443:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3483,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3481,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "51459:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "51459:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "51443:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3484,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51489:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3486,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "51506:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "51506:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "51498:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51498:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51489:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3499,
                  "nodeType": "IfStatement",
                  "src": "51485:264:2",
                  "trueBody": {
                    "id": 3498,
                    "nodeType": "Block",
                    "src": "51523:226:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3492,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3480,
                                  "src": "51678:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3491,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "51672:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51672:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3494,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "51686:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "51686:51:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3490,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "51667:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51667:71:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3497,
                        "nodeType": "Return",
                        "src": "51660:78:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3500,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51759:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3501,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3472,
                          "src": "51767:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accrueInterest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2113,
                        "src": "51767:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                          "typeString": "function () external returns (uint256)"
                        }
                      },
                      "id": 3503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51767:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51759:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3505,
                  "nodeType": "ExpressionStatement",
                  "src": "51759:41:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3506,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51814:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3508,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "51831:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "51831:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "51823:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51823:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51814:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3521,
                  "nodeType": "IfStatement",
                  "src": "51810:268:2",
                  "trueBody": {
                    "id": 3520,
                    "nodeType": "Block",
                    "src": "51848:230:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3514,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3480,
                                  "src": "52003:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3513,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "51997:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51997:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3516,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "52011:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "52011:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3512,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "51992:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51992:75:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3519,
                        "nodeType": "Return",
                        "src": "51985:82:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3523,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "52206:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "52206:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3525,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3468,
                        "src": "52218:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3526,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3470,
                        "src": "52228:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3527,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3472,
                        "src": "52241:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      ],
                      "id": 3522,
                      "name": "liquidateBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3756,
                      "src": "52185:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_CToken_$4422_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,contract CToken) returns (uint256)"
                      }
                    },
                    "id": 3528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "52185:73:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3478,
                  "id": 3529,
                  "nodeType": "Return",
                  "src": "52178:80:2"
                }
              ]
            },
            "documentation": "@notice The sender liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3531,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3475,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3474,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "51390:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "51390:12:2"
              }
            ],
            "name": "liquidateBorrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3468,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51301:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "51301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3470,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51319:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3469,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "51319:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3472,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51340:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3471,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "51340:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "51300:64:2"
            },
            "returnParameters": {
              "id": 3478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3477,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51420:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "51420:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "51419:9:2"
            },
            "scope": 4422,
            "src": "51268:997:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3755,
              "nodeType": "Block",
              "src": "52982:3307:2",
              "statements": [
                {
                  "assignments": [
                    3545
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3545,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "53036:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3544,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "53036:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3558,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3549,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "53110:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "53102:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "53102:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3552,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "53137:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "53129:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "53129:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3554,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "53168:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3555,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "53192:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3556,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "53214:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3546,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "53054:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateBorrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4735,
                      "src": "53054:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "53054:181:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "53036:199:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3559,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3545,
                      "src": "53249:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "53260:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "53249:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3571,
                  "nodeType": "IfStatement",
                  "src": "53245:143:2",
                  "trueBody": {
                    "id": 3570,
                    "nodeType": "Block",
                    "src": "53263:125:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3563,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53295:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53295:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3565,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53324:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3566,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53324:43:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3567,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3545,
                              "src": "53369:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3562,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "53284:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53284:93:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3569,
                        "nodeType": "Return",
                        "src": "53277:100:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3572,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "53473:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3573,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "53495:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53495:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "53473:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3584,
                  "nodeType": "IfStatement",
                  "src": "53469:143:2",
                  "trueBody": {
                    "id": 3583,
                    "nodeType": "Block",
                    "src": "53513:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3577,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53539:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53539:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3579,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53563:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53563:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3576,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53534:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53534:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3582,
                        "nodeType": "Return",
                        "src": "53527:74:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3585,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3539,
                          "src": "53714:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3586,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accrualBlockNumber",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 745,
                        "src": "53714:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                          "typeString": "function () view external returns (uint256)"
                        }
                      },
                      "id": 3587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53714:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3588,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "53755:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53755:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "53714:57:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3599,
                  "nodeType": "IfStatement",
                  "src": "53710:173:2",
                  "trueBody": {
                    "id": 3598,
                    "nodeType": "Block",
                    "src": "53773:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3592,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53799:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53799:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3594,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53823:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COLLATERAL_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53823:48:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3591,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53794:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53794:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3597,
                        "nodeType": "Return",
                        "src": "53787:85:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3600,
                      "name": "borrower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3535,
                      "src": "53941:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3601,
                      "name": "liquidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3533,
                      "src": "53953:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "53941:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3611,
                  "nodeType": "IfStatement",
                  "src": "53937:138:2",
                  "trueBody": {
                    "id": 3610,
                    "nodeType": "Block",
                    "src": "53965:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3604,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53991:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_ACCOUNT_PAIR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53991:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3606,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54019:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_LIQUIDATOR_IS_BORROWER",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54019:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3603,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53986:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53986:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3609,
                        "nodeType": "Return",
                        "src": "53979:85:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3612,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "54127:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "54142:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "54127:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3623,
                  "nodeType": "IfStatement",
                  "src": "54123:140:2",
                  "trueBody": {
                    "id": 3622,
                    "nodeType": "Block",
                    "src": "54145:118:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3616,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54171:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_CLOSE_AMOUNT_REQUESTED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54171:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3618,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54209:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_CLOSE_AMOUNT_IS_ZERO",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54209:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3615,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "54166:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54166:86:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3621,
                        "nodeType": "Return",
                        "src": "54159:93:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3624,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "54316:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "54339:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "54340:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 3625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "54331:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "54331:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "54316:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3638,
                  "nodeType": "IfStatement",
                  "src": "54312:154:2",
                  "trueBody": {
                    "id": 3637,
                    "nodeType": "Block",
                    "src": "54344:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3631,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54370:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_CLOSE_AMOUNT_REQUESTED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54370:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3633,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54408:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54408:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3630,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "54365:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54365:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3636,
                        "nodeType": "Return",
                        "src": "54358:97:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3640,
                    3642
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3640,
                      "name": "amountSeizeError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "54556:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3639,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "54556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3642,
                      "name": "seizeTokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "54582:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3641,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "54582:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3653,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3646,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "54668:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "54660:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3647,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "54660:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3649,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "54695:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "54687:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "54687:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3651,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "54726:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3643,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "54605:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateCalculateSeizeTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4815,
                      "src": "54605:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address,address,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 3652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "54605:142:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "54555:192:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3654,
                      "name": "amountSeizeError",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3640,
                      "src": "54761:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "54781:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "54761:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3666,
                  "nodeType": "IfStatement",
                  "src": "54757:283:2",
                  "trueBody": {
                    "id": 3665,
                    "nodeType": "Block",
                    "src": "54784:256:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3658,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54853:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_CALCULATION_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54853:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3660,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54910:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54910:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3662,
                              "name": "amountSeizeError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3640,
                              "src": "54995:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3657,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "54821:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54821:208:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3664,
                        "nodeType": "Return",
                        "src": "54798:231:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3667,
                      "name": "seizeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3642,
                      "src": "55124:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3670,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3535,
                          "src": "55165:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3668,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3539,
                          "src": "55138:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1273,
                        "src": "55138:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 3671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "55138:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "55124:50:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3681,
                  "nodeType": "IfStatement",
                  "src": "55120:164:2",
                  "trueBody": {
                    "id": 3680,
                    "nodeType": "Block",
                    "src": "55176:108:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3674,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55202:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_BALANCE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55202:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3676,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "55236:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_TOO_MUCH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55236:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3673,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "55197:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55197:76:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3679,
                        "nodeType": "Return",
                        "src": "55190:83:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3683
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3683,
                      "name": "repayBorrowError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "55334:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3682,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "55334:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3689,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3685,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55378:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3686,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55390:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3687,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "55400:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3684,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "55361:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55361:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "55334:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3690,
                      "name": "repayBorrowError",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3683,
                      "src": "55426:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3692,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "55454:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "55454:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "55446:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "55446:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "55426:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3705,
                  "nodeType": "IfStatement",
                  "src": "55422:159:2",
                  "trueBody": {
                    "id": 3704,
                    "nodeType": "Block",
                    "src": "55471:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3698,
                                  "name": "repayBorrowError",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3683,
                                  "src": "55503:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3697,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55497:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "55497:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3700,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "55522:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_REPAY_BORROW_FRESH_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55522:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3696,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "55492:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55492:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3703,
                        "nodeType": "Return",
                        "src": "55485:85:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3707,
                      "name": "seizeError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "55676:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3706,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "55676:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3714,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3710,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55720:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3711,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55732:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3712,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "55742:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3708,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3539,
                        "src": "55697:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      },
                      "id": 3709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3908,
                      "src": "55697:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55697:57:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "55676:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3716,
                          "name": "seizeError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3707,
                          "src": "55772:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3718,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55794:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55794:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 3717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "55786:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55786:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "55772:37:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207365697a757265206661696c6564",
                        "id": 3722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "55811:22:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ef895053050823f299d1eac7edac9fbaf6b5ee335d1b858874856cee7182bcda",
                          "typeString": "literal_string \"token seizure failed\""
                        },
                        "value": "token seizure failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ef895053050823f299d1eac7edac9fbaf6b5ee335d1b858874856cee7182bcda",
                          "typeString": "literal_string \"token seizure failed\""
                        }
                      ],
                      "id": 3715,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "55764:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55764:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3724,
                  "nodeType": "ExpressionStatement",
                  "src": "55764:70:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3726,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55912:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3727,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55924:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3728,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "55934:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3730,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "55955:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "55947:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "55947:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3732,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "55974:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3725,
                      "name": "LiquidateBorrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 830,
                      "src": "55896:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,address,uint256)"
                      }
                    },
                    "id": 3733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55896:90:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3734,
                  "nodeType": "EmitStatement",
                  "src": "55891:95:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3739,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "56091:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "56083:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "56083:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3742,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "56118:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "56110:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "56110:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3744,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "56149:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3745,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "56173:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3746,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "56195:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3747,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "56220:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3735,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "56036:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateBorrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4750,
                      "src": "56036:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256) external"
                      }
                    },
                    "id": 3748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "56036:205:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3749,
                  "nodeType": "ExpressionStatement",
                  "src": "56036:205:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3751,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "56267:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "56267:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "56259:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "56259:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3543,
                  "id": 3754,
                  "nodeType": "Return",
                  "src": "56252:30:2"
                }
              ]
            },
            "documentation": "@notice The liquidator liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param liquidator The address repaying the borrow and seizing collateral\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3756,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidateBorrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3540,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3533,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52851:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3532,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "52851:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3535,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52871:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3534,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "52871:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3537,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52889:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3536,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52889:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3539,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52910:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3538,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "52910:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "52850:84:2"
            },
            "returnParameters": {
              "id": 3543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3542,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52969:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52969:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "52968:9:2"
            },
            "scope": 4422,
            "src": "52821:3468:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3907,
              "nodeType": "Block",
              "src": "56953:1985:2",
              "statements": [
                {
                  "assignments": [
                    3770
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3770,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57003:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3769,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57003:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3782,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3774,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "57054:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "57046:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "57046:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3776,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "57061:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3777,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "57061:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3778,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "57073:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3779,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "57085:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "57095:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3771,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "57021:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4765,
                      "src": "57021:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "57021:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57003:104:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3783,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3770,
                      "src": "57121:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "57132:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "57121:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3795,
                  "nodeType": "IfStatement",
                  "src": "57117:149:2",
                  "trueBody": {
                    "id": 3794,
                    "nodeType": "Block",
                    "src": "57135:131:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3787,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57167:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3788,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57167:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3789,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "57196:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57196:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3791,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3770,
                              "src": "57247:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3786,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "57156:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57156:99:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3793,
                        "nodeType": "Return",
                        "src": "57149:106:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3796,
                      "name": "borrower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3760,
                      "src": "57324:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3797,
                      "name": "liquidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3758,
                      "src": "57336:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "57324:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3807,
                  "nodeType": "IfStatement",
                  "src": "57320:144:2",
                  "trueBody": {
                    "id": 3806,
                    "nodeType": "Block",
                    "src": "57348:116:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3800,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57374:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_ACCOUNT_PAIR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57374:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3802,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "57402:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57402:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3799,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "57369:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57369:84:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3805,
                        "nodeType": "Return",
                        "src": "57362:91:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3809,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57474:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3808,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "57474:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3810,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57474:17:2"
                },
                {
                  "assignments": [
                    3812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3812,
                      "name": "borrowerTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57501:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3811,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57501:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3813,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57501:25:2"
                },
                {
                  "assignments": [
                    3815
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3815,
                      "name": "liquidatorTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57536:27:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3814,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57536:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3816,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57536:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 3817,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3809,
                          "src": "57845:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3818,
                          "name": "borrowerTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3812,
                          "src": "57854:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3819,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "57844:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3821,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "57883:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3823,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3822,
                            "name": "borrower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3760,
                            "src": "57897:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "57883:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3824,
                          "name": "seizeTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3762,
                          "src": "57908:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3820,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "57875:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "57875:45:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "57844:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3827,
                  "nodeType": "ExpressionStatement",
                  "src": "57844:76:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3828,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3809,
                      "src": "57934:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3829,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "57945:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "57945:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "57934:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3843,
                  "nodeType": "IfStatement",
                  "src": "57930:167:2",
                  "trueBody": {
                    "id": 3842,
                    "nodeType": "Block",
                    "src": "57965:132:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3833,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57997:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57997:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3835,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "58015:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58015:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3838,
                                  "name": "mathErr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3809,
                                  "src": "58077:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "58069:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3839,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58069:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3832,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "57986:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57986:100:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3841,
                        "nodeType": "Return",
                        "src": "57979:107:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 3844,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3809,
                          "src": "58108:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3845,
                          "name": "liquidatorTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3815,
                          "src": "58117:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3846,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "58107:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3848,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "58148:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3850,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3849,
                            "name": "liquidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3758,
                            "src": "58162:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "58148:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3851,
                          "name": "seizeTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3762,
                          "src": "58175:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3847,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "58140:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "58140:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "58107:80:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3854,
                  "nodeType": "ExpressionStatement",
                  "src": "58107:80:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3855,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3809,
                      "src": "58201:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3856,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "58212:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "58212:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "58201:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3870,
                  "nodeType": "IfStatement",
                  "src": "58197:167:2",
                  "trueBody": {
                    "id": 3869,
                    "nodeType": "Block",
                    "src": "58232:132:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3860,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "58264:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58264:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3862,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "58282:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58282:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3865,
                                  "name": "mathErr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3809,
                                  "src": "58344:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3864,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "58336:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3866,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58336:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3859,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "58253:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58253:100:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3868,
                        "nodeType": "Return",
                        "src": "58246:107:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3871,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "58560:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3873,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3872,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58574:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "58560:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3874,
                      "name": "borrowerTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3812,
                      "src": "58586:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "58560:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3876,
                  "nodeType": "ExpressionStatement",
                  "src": "58560:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3877,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "58613:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3879,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3878,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58627:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "58613:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3880,
                      "name": "liquidatorTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3815,
                      "src": "58641:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "58613:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3882,
                  "nodeType": "ExpressionStatement",
                  "src": "58613:47:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3884,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58721:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3885,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58731:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3886,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "58743:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3883,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "58712:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58712:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3888,
                  "nodeType": "EmitStatement",
                  "src": "58707:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3893,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "58837:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "58829:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "58829:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3895,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "58844:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "58844:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3897,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58856:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3898,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58868:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3899,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "58878:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3889,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "58805:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4778,
                      "src": "58805:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256) external"
                      }
                    },
                    "id": 3900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58805:85:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3901,
                  "nodeType": "ExpressionStatement",
                  "src": "58805:85:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3903,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "58916:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "58916:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "58908:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58908:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3768,
                  "id": 3906,
                  "nodeType": "Return",
                  "src": "58901:30:2"
                }
              ]
            },
            "documentation": "@notice Transfers collateral tokens (this market) to the liquidator.\n@dev Will fail unless called by another cToken during the process of liquidation.\n Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.\n@param liquidator The account receiving seized collateral\n@param borrower The account having collateral seized\n@param seizeTokens The number of cTokens to seize\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3764,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "56922:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "56922:12:2"
              }
            ],
            "name": "seize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3758,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56854:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3757,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "56854:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3760,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56874:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "56874:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3762,
                  "name": "seizeTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56892:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3761,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "56892:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "56853:59:2"
            },
            "returnParameters": {
              "id": 3768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3767,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56944:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "56944:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "56943:9:2"
            },
            "scope": 4422,
            "src": "56839:2099:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3946,
              "nodeType": "Block",
              "src": "59560:551:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 3918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3915,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "59606:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "59606:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3917,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "59620:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "59606:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3927,
                  "nodeType": "IfStatement",
                  "src": "59602:124:2",
                  "trueBody": {
                    "id": 3926,
                    "nodeType": "Block",
                    "src": "59627:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3920,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "59653:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "59653:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3922,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "59673:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3923,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_PENDING_ADMIN_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "59673:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3919,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "59648:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59648:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3914,
                        "id": 3925,
                        "nodeType": "Return",
                        "src": "59641:74:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3929,
                      "name": "oldPendingAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 3946,
                      "src": "59796:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3928,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "59796:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3931,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3930,
                    "name": "pendingAdmin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 735,
                    "src": "59822:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "59796:38:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3932,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "59902:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3933,
                      "name": "newPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3910,
                      "src": "59917:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "59902:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3935,
                  "nodeType": "ExpressionStatement",
                  "src": "59902:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3937,
                        "name": "oldPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3929,
                        "src": "60030:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3938,
                        "name": "newPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3910,
                        "src": "60047:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3936,
                      "name": "NewPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 836,
                      "src": "60014:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60014:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3940,
                  "nodeType": "EmitStatement",
                  "src": "60009:54:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3942,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "60089:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3943,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60089:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "60081:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60081:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3914,
                  "id": 3945,
                  "nodeType": "Return",
                  "src": "60074:30:2"
                }
              ]
            },
            "documentation": "@notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@param newPendingAdmin New pending admin.\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?",
            "id": 3947,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setPendingAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3910,
                  "name": "newPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 3947,
                  "src": "59500:31:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3909,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "59500:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "59499:33:2"
            },
            "returnParameters": {
              "id": 3914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3947,
                  "src": "59551:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "59551:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "59550:9:2"
            },
            "scope": 4422,
            "src": "59474:637:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4005,
              "nodeType": "Block",
              "src": "60433:677:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "id": 3955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3952,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "60519:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60519:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3954,
                        "name": "pendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "60533:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "60519:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "id": 3961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3956,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "60549:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60549:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "60571:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "60563:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "60563:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "60549:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "60519:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3971,
                  "nodeType": "IfStatement",
                  "src": "60515:162:2",
                  "trueBody": {
                    "id": 3970,
                    "nodeType": "Block",
                    "src": "60575:102:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3964,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "60601:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "60601:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3966,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "60621:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "60621:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3963,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "60596:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60596:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3951,
                        "id": 3969,
                        "nodeType": "Return",
                        "src": "60589:77:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3973
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3973,
                      "name": "oldAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 4005,
                      "src": "60739:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3972,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "60739:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3975,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3974,
                    "name": "admin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 733,
                    "src": "60758:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "60739:24:2"
                },
                {
                  "assignments": [
                    3977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3977,
                      "name": "oldPendingAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 4005,
                      "src": "60773:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "60773:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3979,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3978,
                    "name": "pendingAdmin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 735,
                    "src": "60799:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "60773:38:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3980,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "60869:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3981,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "60877:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "60869:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3983,
                  "nodeType": "ExpressionStatement",
                  "src": "60869:20:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3984,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "60935:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "60958:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "60950:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "60950:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "60935:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3989,
                  "nodeType": "ExpressionStatement",
                  "src": "60935:25:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3991,
                        "name": "oldAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3973,
                        "src": "60985:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3992,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 733,
                        "src": "60995:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3990,
                      "name": "NewAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 842,
                      "src": "60976:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60976:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3994,
                  "nodeType": "EmitStatement",
                  "src": "60971:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "oldPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3977,
                        "src": "61032:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3997,
                        "name": "pendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "61049:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3995,
                      "name": "NewPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 836,
                      "src": "61016:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61016:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3999,
                  "nodeType": "EmitStatement",
                  "src": "61011:51:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4001,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "61088:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "61088:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "61080:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61080:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3951,
                  "id": 4004,
                  "nodeType": "Return",
                  "src": "61073:30:2"
                }
              ]
            },
            "documentation": "@notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\n@dev Admin function for pending admin to accept role and update admin\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_acceptAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3948,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "60403:2:2"
            },
            "returnParameters": {
              "id": 3951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3950,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4006,
                  "src": "60424:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "60424:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "60423:9:2"
            },
            "scope": 4422,
            "src": "60382:728:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4051,
              "nodeType": "Block",
              "src": "61415:637:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4013,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "61462:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "61462:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4015,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "61476:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "61462:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4025,
                  "nodeType": "IfStatement",
                  "src": "61458:122:2",
                  "trueBody": {
                    "id": 4024,
                    "nodeType": "Block",
                    "src": "61483:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4018,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "61509:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "61509:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4020,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "61529:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_COMPTROLLER_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "61529:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4017,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "61504:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "61504:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4012,
                        "id": 4023,
                        "nodeType": "Return",
                        "src": "61497:72:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4027
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4027,
                      "name": "oldComptroller",
                      "nodeType": "VariableDeclaration",
                      "scope": 4051,
                      "src": "61590:35:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4026,
                        "name": "ComptrollerInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4816,
                        "src": "61590:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4029,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4028,
                    "name": "comptroller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 737,
                    "src": "61628:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "61590:49:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4031,
                            "name": "newComptroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4008,
                            "src": "61723:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                              "typeString": "contract ComptrollerInterface"
                            }
                          },
                          "id": 4032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isComptroller",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4614,
                          "src": "61723:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                            "typeString": "function () view external returns (bool)"
                          }
                        },
                        "id": 4033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "61723:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6d61726b6572206d6574686f642072657475726e65642066616c7365",
                        "id": 4034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "61755:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        },
                        "value": "marker method returned false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        }
                      ],
                      "id": 4030,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "61715:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61715:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4036,
                  "nodeType": "ExpressionStatement",
                  "src": "61715:71:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4037,
                      "name": "comptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 737,
                      "src": "61851:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4038,
                      "name": "newComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "61865:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      }
                    },
                    "src": "61851:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "id": 4040,
                  "nodeType": "ExpressionStatement",
                  "src": "61851:28:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "oldComptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4027,
                        "src": "61973:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4043,
                        "name": "newComptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4008,
                        "src": "61989:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        },
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      ],
                      "id": 4041,
                      "name": "NewComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 848,
                      "src": "61958:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_ComptrollerInterface_$4816_$_t_contract$_ComptrollerInterface_$4816_$returns$__$",
                        "typeString": "function (contract ComptrollerInterface,contract ComptrollerInterface)"
                      }
                    },
                    "id": 4044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61958:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4045,
                  "nodeType": "EmitStatement",
                  "src": "61953:51:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4047,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "62030:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "62030:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "62022:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62022:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4012,
                  "id": 4050,
                  "nodeType": "Return",
                  "src": "62015:30:2"
                }
              ]
            },
            "documentation": "@notice Sets a new comptroller for the market\n@dev Admin function to set a new comptroller\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setComptroller",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4008,
                  "name": "newComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 4052,
                  "src": "61353:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4007,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "61353:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "61352:37:2"
            },
            "returnParameters": {
              "id": 4012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4011,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4052,
                  "src": "61406:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4010,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "61406:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "61405:9:2"
            },
            "scope": 4422,
            "src": "61328:724:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4086,
              "nodeType": "Block",
              "src": "62449:510:2",
              "statements": [
                {
                  "assignments": [
                    4062
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4062,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4086,
                      "src": "62459:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4061,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "62459:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4063,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "62475:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62475:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "62459:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4066,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4062,
                      "src": "62505:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4068,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "62522:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "62522:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "62514:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "62514:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "62505:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4081,
                  "nodeType": "IfStatement",
                  "src": "62501:286:2",
                  "trueBody": {
                    "id": 4080,
                    "nodeType": "Block",
                    "src": "62539:248:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4074,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4062,
                                  "src": "62714:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4073,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "62708:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "62708:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4076,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "62722:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4077,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "62722:53:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4072,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "62703:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "62703:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4060,
                        "id": 4079,
                        "nodeType": "Return",
                        "src": "62696:80:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4083,
                        "name": "newReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4054,
                        "src": "62927:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4082,
                      "name": "_setReserveFactorFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4151,
                      "src": "62904:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62904:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4060,
                  "id": 4085,
                  "nodeType": "Return",
                  "src": "62897:55:2"
                }
              ]
            },
            "documentation": "@notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\n@dev Admin function to accrue interest and set a new reserve factor\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4087,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4056,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "62418:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "62418:12:2"
              }
            ],
            "name": "_setReserveFactor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4054,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 4087,
                  "src": "62375:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4053,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "62375:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "62374:34:2"
            },
            "returnParameters": {
              "id": 4060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4059,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4087,
                  "src": "62440:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "62440:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "62439:9:2"
            },
            "scope": 4422,
            "src": "62348:611:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4150,
              "nodeType": "Block",
              "src": "63313:922:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4094,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "63360:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "63360:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4096,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "63374:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "63360:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4106,
                  "nodeType": "IfStatement",
                  "src": "63356:125:2",
                  "trueBody": {
                    "id": 4105,
                    "nodeType": "Block",
                    "src": "63381:100:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4099,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63407:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4100,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63407:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4101,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63427:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63427:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4098,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63402:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63402:68:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4104,
                        "nodeType": "Return",
                        "src": "63395:75:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4107,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "63563:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4108,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "63585:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "63585:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "63563:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4119,
                  "nodeType": "IfStatement",
                  "src": "63559:200:2",
                  "trueBody": {
                    "id": 4118,
                    "nodeType": "Block",
                    "src": "63603:156:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4112,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63681:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4113,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63681:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4114,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63705:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63705:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4111,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63676:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63676:72:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4117,
                        "nodeType": "Return",
                        "src": "63669:79:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4120,
                      "name": "newReserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4089,
                      "src": "63828:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4121,
                      "name": "reserveFactorMaxMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 731,
                      "src": "63855:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "63828:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4131,
                  "nodeType": "IfStatement",
                  "src": "63824:155:2",
                  "trueBody": {
                    "id": 4130,
                    "nodeType": "Block",
                    "src": "63881:98:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4124,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63907:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63907:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4126,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63924:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_BOUNDS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63924:43:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4123,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63902:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63902:66:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4129,
                        "nodeType": "Return",
                        "src": "63895:73:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4133
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4133,
                      "name": "oldReserveFactorMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 4150,
                      "src": "63989:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4132,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "63989:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4135,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4134,
                    "name": "reserveFactorMantissa",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 743,
                    "src": "64024:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "63989:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4136,
                      "name": "reserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 743,
                      "src": "64055:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4137,
                      "name": "newReserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4089,
                      "src": "64079:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "64055:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4139,
                  "nodeType": "ExpressionStatement",
                  "src": "64055:48:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4141,
                        "name": "oldReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4133,
                        "src": "64136:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4142,
                        "name": "newReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4089,
                        "src": "64162:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4140,
                      "name": "NewReserveFactor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 860,
                      "src": "64119:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64119:68:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4144,
                  "nodeType": "EmitStatement",
                  "src": "64114:73:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4146,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "64213:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "64213:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "64205:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64205:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4093,
                  "id": 4149,
                  "nodeType": "Return",
                  "src": "64198:30:2"
                }
              ]
            },
            "documentation": "@notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\n@dev Admin function to set a new reserve factor\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4151,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setReserveFactorFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4089,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 4151,
                  "src": "63252:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4088,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "63252:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "63251:34:2"
            },
            "returnParameters": {
              "id": 4093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4092,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4151,
                  "src": "63304:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "63304:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "63303:9:2"
            },
            "scope": 4422,
            "src": "63220:1015:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4185,
              "nodeType": "Block",
              "src": "64568:488:2",
              "statements": [
                {
                  "assignments": [
                    4161
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4161,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4185,
                      "src": "64578:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4160,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "64578:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4162,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "64594:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64594:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "64578:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4165,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4161,
                      "src": "64624:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4167,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "64641:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "64641:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4166,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "64633:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "64633:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "64624:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4180,
                  "nodeType": "IfStatement",
                  "src": "64620:277:2",
                  "trueBody": {
                    "id": 4179,
                    "nodeType": "Block",
                    "src": "64658:239:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4173,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4161,
                                  "src": "64827:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4172,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "64821:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "64821:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4175,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "64835:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "64835:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4171,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "64816:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "64816:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4159,
                        "id": 4178,
                        "nodeType": "Return",
                        "src": "64809:77:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4153,
                        "src": "65036:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4181,
                      "name": "_reduceReservesFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294,
                      "src": "65015:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "65015:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4159,
                  "id": 4184,
                  "nodeType": "Return",
                  "src": "65008:41:2"
                }
              ]
            },
            "documentation": "@notice Accrues interest and reduces reserves by transferring to admin\n@param reduceAmount Amount of reduction to reserves\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4186,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4156,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4155,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "64537:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "64537:12:2"
              }
            ],
            "name": "_reduceReserves",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4153,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4186,
                  "src": "64506:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "64506:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "64505:22:2"
            },
            "returnParameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4158,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4186,
                  "src": "64559:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "64559:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "64558:9:2"
            },
            "scope": 4422,
            "src": "64481:575:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4293,
              "nodeType": "Block",
              "src": "65404:1948:2",
              "statements": [
                {
                  "assignments": [
                    4194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4194,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 4293,
                      "src": "65414:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4193,
                        "name": "Error",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5069,
                        "src": "65414:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "65414:9:2"
                },
                {
                  "assignments": [
                    4197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4197,
                      "name": "totalReservesNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 4293,
                      "src": "65473:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4196,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "65473:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4198,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "65473:24:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4199,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "65545:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "65545:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4201,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "65559:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "65545:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4211,
                  "nodeType": "IfStatement",
                  "src": "65541:122:2",
                  "trueBody": {
                    "id": 4210,
                    "nodeType": "Block",
                    "src": "65566:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4204,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "65592:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65592:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4206,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "65612:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65612:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4203,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "65587:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "65587:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4209,
                        "nodeType": "Return",
                        "src": "65580:72:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4212,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "65764:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4213,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "65786:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "65786:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "65764:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4224,
                  "nodeType": "IfStatement",
                  "src": "65760:197:2",
                  "trueBody": {
                    "id": 4223,
                    "nodeType": "Block",
                    "src": "65804:153:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4217,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "65882:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65882:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4219,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "65906:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65906:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4216,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "65877:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "65877:69:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4222,
                        "nodeType": "Return",
                        "src": "65870:76:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4225,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "66043:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "66043:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4227,
                      "name": "reduceAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4188,
                      "src": "66060:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66043:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4237,
                  "nodeType": "IfStatement",
                  "src": "66039:150:2",
                  "trueBody": {
                    "id": 4236,
                    "nodeType": "Block",
                    "src": "66074:115:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4230,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "66100:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66100:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4232,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "66131:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4233,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_CASH_NOT_AVAILABLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66131:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4229,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "66095:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "66095:83:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4235,
                        "nodeType": "Return",
                        "src": "66088:90:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4238,
                      "name": "reduceAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4188,
                      "src": "66419:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4239,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "66434:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66419:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4249,
                  "nodeType": "IfStatement",
                  "src": "66415:127:2",
                  "trueBody": {
                    "id": 4248,
                    "nodeType": "Block",
                    "src": "66449:93:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4242,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "66475:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66475:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4244,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "66492:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_VALIDATION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66492:38:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4241,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "66470:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "66470:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4247,
                        "nodeType": "Return",
                        "src": "66463:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4250,
                      "name": "totalReservesNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "66669:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4251,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "66688:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4252,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4188,
                        "src": "66704:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "66688:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66669:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4255,
                  "nodeType": "ExpressionStatement",
                  "src": "66669:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4257,
                          "name": "totalReservesNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4197,
                          "src": "66822:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4258,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "66842:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "66822:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72656475636520726573657276657320756e657870656374656420756e646572666c6f77",
                        "id": 4260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "66857:38:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eb43be357f02f888aece778e1a59d1657b49201e44ced42f483132b975f83f50",
                          "typeString": "literal_string \"reduce reserves unexpected underflow\""
                        },
                        "value": "reduce reserves unexpected underflow"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eb43be357f02f888aece778e1a59d1657b49201e44ced42f483132b975f83f50",
                          "typeString": "literal_string \"reduce reserves unexpected underflow\""
                        }
                      ],
                      "id": 4256,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "66814:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "66814:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4262,
                  "nodeType": "ExpressionStatement",
                  "src": "66814:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4263,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "66967:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4264,
                      "name": "totalReservesNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "66983:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66967:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4266,
                  "nodeType": "ExpressionStatement",
                  "src": "66967:32:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4267,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4194,
                      "src": "67063:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4269,
                          "name": "admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 733,
                          "src": "67083:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4270,
                          "name": "reduceAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4188,
                          "src": "67090:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4268,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "67069:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 4271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "67069:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "67063:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 4273,
                  "nodeType": "ExpressionStatement",
                  "src": "67063:40:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 4278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4275,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4194,
                          "src": "67173:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4276,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "67180:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "67180:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "67173:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726564756365207265736572766573207472616e73666572206f7574206661696c6564",
                        "id": 4279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "67196:37:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3cfd2a2d85e9158620b2ecee5a64d70d1273f35b6fd1d4da1728bd0d5befd3f2",
                          "typeString": "literal_string \"reduce reserves transfer out failed\""
                        },
                        "value": "reduce reserves transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3cfd2a2d85e9158620b2ecee5a64d70d1273f35b6fd1d4da1728bd0d5befd3f2",
                          "typeString": "literal_string \"reduce reserves transfer out failed\""
                        }
                      ],
                      "id": 4274,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "67165:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67165:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4281,
                  "nodeType": "ExpressionStatement",
                  "src": "67165:69:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 733,
                        "src": "67266:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4284,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4188,
                        "src": "67273:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4285,
                        "name": "totalReservesNew",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "67287:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4282,
                      "name": "ReservesReduced",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 868,
                      "src": "67250:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67250:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4287,
                  "nodeType": "EmitStatement",
                  "src": "67245:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "67330:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "67330:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "67322:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67322:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4192,
                  "id": 4292,
                  "nodeType": "Return",
                  "src": "67315:30:2"
                }
              ]
            },
            "documentation": "@notice Reduces reserves by transferring to admin\n@dev Requires fresh interest accrual\n@param reduceAmount Amount of reduction to reserves\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_reduceReservesFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4188,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "65355:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4187,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "65355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "65354:22:2"
            },
            "returnParameters": {
              "id": 4192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4191,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "65395:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "65395:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "65394:9:2"
            },
            "scope": 4422,
            "src": "65325:2027:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4326,
              "nodeType": "Block",
              "src": "67809:538:2",
              "statements": [
                {
                  "assignments": [
                    4302
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4302,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4326,
                      "src": "67819:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4301,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "67819:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4305,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4303,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "67835:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67835:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "67819:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4306,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4302,
                      "src": "67865:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4308,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "67882:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "67882:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "67874:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "67874:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "67865:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4321,
                  "nodeType": "IfStatement",
                  "src": "67861:298:2",
                  "trueBody": {
                    "id": 4320,
                    "nodeType": "Block",
                    "src": "67899:260:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4314,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "68081:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4313,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "68075:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4315,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "68075:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4316,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "68089:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "68089:58:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4312,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "68070:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "68070:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4300,
                        "id": 4319,
                        "nodeType": "Return",
                        "src": "68063:85:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4323,
                        "name": "newInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4296,
                        "src": "68319:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      ],
                      "id": 4322,
                      "name": "_setInterestRateModelFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4389,
                      "src": "68292:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_InterestRateModel_$5819_$returns$_t_uint256_$",
                        "typeString": "function (contract InterestRateModel) returns (uint256)"
                      }
                    },
                    "id": 4324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "68292:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4300,
                  "id": 4325,
                  "nodeType": "Return",
                  "src": "68285:55:2"
                }
              ]
            },
            "documentation": "@notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\n@dev Admin function to accrue interest and update the interest rate model\n@param newInterestRateModel the new interest rate model to use\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4327,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestRateModel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4296,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4327,
                  "src": "67744:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4295,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "67744:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "67743:40:2"
            },
            "returnParameters": {
              "id": 4300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4299,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4327,
                  "src": "67800:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4298,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "67800:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "67799:9:2"
            },
            "scope": 4422,
            "src": "67713:634:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4388,
              "nodeType": "Block",
              "src": "68772:1225:2",
              "statements": [
                {
                  "assignments": [
                    4335
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4335,
                      "name": "oldInterestRateModel",
                      "nodeType": "VariableDeclaration",
                      "scope": 4388,
                      "src": "68865:38:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4334,
                        "name": "InterestRateModel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5819,
                        "src": "68865:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4336,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "68865:38:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4337,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "68951:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "68951:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4339,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "68965:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "68951:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4349,
                  "nodeType": "IfStatement",
                  "src": "68947:130:2",
                  "trueBody": {
                    "id": 4348,
                    "nodeType": "Block",
                    "src": "68972:105:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4342,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "68998:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "68998:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4344,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "69018:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69018:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4341,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "68993:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "68993:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4333,
                        "id": 4347,
                        "nodeType": "Return",
                        "src": "68986:80:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4350,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "69178:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4351,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "69200:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "69200:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "69178:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4362,
                  "nodeType": "IfStatement",
                  "src": "69174:205:2",
                  "trueBody": {
                    "id": 4361,
                    "nodeType": "Block",
                    "src": "69218:161:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4355,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "69296:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69296:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4357,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "69320:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69320:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4354,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "69291:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "69291:77:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4333,
                        "id": 4360,
                        "nodeType": "Return",
                        "src": "69284:84:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4363,
                      "name": "oldInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4335,
                      "src": "69447:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4364,
                      "name": "interestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "69470:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "src": "69447:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "id": 4366,
                  "nodeType": "ExpressionStatement",
                  "src": "69447:40:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4368,
                            "name": "newInterestRateModel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4329,
                            "src": "69587:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                              "typeString": "contract InterestRateModel"
                            }
                          },
                          "id": 4369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isInterestRateModel",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5818,
                          "src": "69587:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                            "typeString": "function () view external returns (bool)"
                          }
                        },
                        "id": 4370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "69587:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6d61726b6572206d6574686f642072657475726e65642066616c7365",
                        "id": 4371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "69631:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        },
                        "value": "marker method returned false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        }
                      ],
                      "id": 4367,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "69579:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69579:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4373,
                  "nodeType": "ExpressionStatement",
                  "src": "69579:83:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4374,
                      "name": "interestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "69736:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4375,
                      "name": "newInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4329,
                      "src": "69756:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "src": "69736:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "id": 4377,
                  "nodeType": "ExpressionStatement",
                  "src": "69736:40:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4379,
                        "name": "oldInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4335,
                        "src": "69906:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4380,
                        "name": "newInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4329,
                        "src": "69928:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        },
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      ],
                      "id": 4378,
                      "name": "NewMarketInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 854,
                      "src": "69879:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_InterestRateModel_$5819_$_t_contract$_InterestRateModel_$5819_$returns$__$",
                        "typeString": "function (contract InterestRateModel,contract InterestRateModel)"
                      }
                    },
                    "id": 4381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69879:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4382,
                  "nodeType": "EmitStatement",
                  "src": "69874:75:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4384,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "69975:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "69975:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "69967:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69967:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4333,
                  "id": 4387,
                  "nodeType": "Return",
                  "src": "69960:30:2"
                }
              ]
            },
            "documentation": "@notice updates the interest rate model (*requires fresh interest accrual)\n@dev Admin function to update the interest rate model\n@param newInterestRateModel the new interest rate model to use\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestRateModelFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4329,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4389,
                  "src": "68705:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4328,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "68705:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "68704:40:2"
            },
            "returnParameters": {
              "id": 4333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4389,
                  "src": "68763:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "68763:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "68762:9:2"
            },
            "scope": 4422,
            "src": "68669:1328:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@notice Gets balance of this contract in terms of the underlying\n@dev This excludes the value of the current message, if any\n@return The quantity of underlying owned by this contract",
            "id": 4394,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getCashPrior",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "70270:2:2"
            },
            "returnParameters": {
              "id": 4393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4392,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4394,
                  "src": "70296:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "70296:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70295:9:2"
            },
            "scope": 4422,
            "src": "70249:56:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.",
            "id": 4403,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4396,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70559:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "70559:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4398,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70573:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "70573:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70558:30:2"
            },
            "returnParameters": {
              "id": 4402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4401,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70612:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4400,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "70612:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70611:7:2"
            },
            "scope": 4422,
            "src": "70534:85:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Performs a transfer in, ideally returning an explanatory error code upon failure rather than reverting.\n If caller has not called `checkTransferIn`, this may revert due to insufficient balance or insufficient allowance.\n If caller has called `checkTransferIn` successfully, this should not revert in normal conditions.",
            "id": 4412,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4405,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71008:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "71008:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4407,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71022:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4406,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "71022:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71007:30:2"
            },
            "returnParameters": {
              "id": 4411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4410,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71056:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4409,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "71056:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71055:7:2"
            },
            "scope": 4422,
            "src": "70986:77:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Performs a transfer out, ideally returning an explanatory error code upon failure tather than reverting.\n If caller has not called checked protocol's balance, may revert due to insufficient cash held in the contract.\n If caller has checked protocol's balance, and verified it is >= amount, this should not revert in normal conditions.",
            "id": 4421,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4414,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71469:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4413,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "71469:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4416,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71489:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "71489:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71468:36:2"
            },
            "returnParameters": {
              "id": 4420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4419,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71523:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4418,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "71523:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71522:7:2"
            },
            "scope": 4422,
            "src": "71446:84:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4423,
        "src": "320:71212:2"
      }
    ],
    "src": "0:71533:2"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/CToken.sol",
    "exportedSymbols": {
      "CToken": [
        4422
      ]
    },
    "id": 4423,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 702,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/EIP20Interface.sol",
        "file": "./EIP20Interface.sol",
        "id": 703,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 4886,
        "src": "25:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/Exponential.sol",
        "file": "./Exponential.sol",
        "id": 704,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5799,
        "src": "56:27:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol",
        "file": "./ErrorReporter.sol",
        "id": 705,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5208,
        "src": "84:29:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 706,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5852,
        "src": "114:31:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ComptrollerInterface.sol",
        "file": "./ComptrollerInterface.sol",
        "id": 707,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 4817,
        "src": "146:36:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/InterestRateModel.sol",
        "file": "./InterestRateModel.sol",
        "id": 708,
        "nodeType": "ImportDirective",
        "scope": 4423,
        "sourceUnit": 5820,
        "src": "183:33:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 709,
              "name": "EIP20Interface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4885,
              "src": "339:14:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EIP20Interface_$4885",
                "typeString": "contract EIP20Interface"
              }
            },
            "id": 710,
            "nodeType": "InheritanceSpecifier",
            "src": "339:14:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 711,
              "name": "Exponential",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5798,
              "src": "355:11:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Exponential_$5798",
                "typeString": "contract Exponential"
              }
            },
            "id": 712,
            "nodeType": "InheritanceSpecifier",
            "src": "355:11:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 713,
              "name": "TokenErrorReporter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5207,
              "src": "368:18:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenErrorReporter_$5207",
                "typeString": "contract TokenErrorReporter"
              }
            },
            "id": 714,
            "nodeType": "InheritanceSpecifier",
            "src": "368:18:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 715,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5851,
              "src": "388:15:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$5851",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 716,
            "nodeType": "InheritanceSpecifier",
            "src": "388:15:2"
          }
        ],
        "contractDependencies": [
          4607,
          4885,
          5207,
          5798,
          5851
        ],
        "contractKind": "contract",
        "documentation": "@title Compound's CToken Contract\n@notice Abstract base for CTokens\n@author Compound",
        "fullyImplemented": false,
        "id": 4422,
        "linearizedBaseContracts": [
          4422,
          5851,
          5207,
          5798,
          4607,
          4885
        ],
        "name": "CToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 719,
            "name": "isCToken",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "499:36:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 717,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "499:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 718,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "531:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 721,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "606:18:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 720,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "606:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 723,
            "name": "symbol",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "697:20:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 722,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "697:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 725,
            "name": "decimals",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "792:23:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 724,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "792:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 728,
            "name": "borrowRateMaxMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "915:45:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 726,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "915:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "35653134",
              "id": 727,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "956:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_500000000000000_by_1",
                "typeString": "int_const 500000000000000"
              },
              "value": "5e14"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 731,
            "name": "reserveFactorMaxMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1062:48:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 729,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1062:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31653138",
              "id": 730,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1106:4:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 733,
            "name": "admin",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1180:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 732,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1180:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 735,
            "name": "pendingAdmin",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1286:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 734,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1286:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 737,
            "name": "comptroller",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1407:39:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
              "typeString": "contract ComptrollerInterface"
            },
            "typeName": {
              "contractScope": null,
              "id": 736,
              "name": "ComptrollerInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4816,
              "src": "1407:20:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                "typeString": "contract ComptrollerInterface"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 739,
            "name": "interestRateModel",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1543:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_InterestRateModel_$5819",
              "typeString": "contract InterestRateModel"
            },
            "typeName": {
              "contractScope": null,
              "id": 738,
              "name": "InterestRateModel",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5819,
              "src": "1543:17:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                "typeString": "contract InterestRateModel"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 741,
            "name": "initialExchangeRateMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1709:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 740,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1709:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 743,
            "name": "reserveFactorMantissa",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1843:36:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 742,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1843:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 745,
            "name": "accrualBlockNumber",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "1964:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 744,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1964:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 747,
            "name": "borrowIndex",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2104:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 746,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2104:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 749,
            "name": "totalBorrows",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2237:27:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 748,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2237:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 751,
            "name": "totalReserves",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2365:28:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 750,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2365:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 753,
            "name": "totalSupply",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2469:26:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 752,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2469:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 757,
            "name": "accountTokens",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2584:41:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 756,
              "keyType": {
                "id": 754,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2592:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2584:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 755,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2603:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 763,
            "name": "transferAllowances",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "2715:66:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 762,
              "keyType": {
                "id": 758,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2723:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2715:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 761,
                "keyType": {
                  "id": 759,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2742:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2734:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 760,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2753:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.BorrowSnapshot",
            "id": 768,
            "members": [
              {
                "constant": false,
                "id": 765,
                "name": "principal",
                "nodeType": "VariableDeclaration",
                "scope": 768,
                "src": "3105:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 764,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3105:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 767,
                "name": "interestIndex",
                "nodeType": "VariableDeclaration",
                "scope": 768,
                "src": "3132:21:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 766,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3132:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BorrowSnapshot",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "3073:87:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 772,
            "name": "accountBorrows",
            "nodeType": "VariableDeclaration",
            "scope": 4422,
            "src": "3257:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
              "typeString": "mapping(address => struct CToken.BorrowSnapshot)"
            },
            "typeName": {
              "id": 771,
              "keyType": {
                "id": 769,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3265:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3257:34:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                "typeString": "mapping(address => struct CToken.BorrowSnapshot)"
              },
              "valueType": {
                "contractScope": null,
                "id": 770,
                "name": "BorrowSnapshot",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 768,
                "src": "3276:14:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                  "typeString": "struct CToken.BorrowSnapshot"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when interest is accrued",
            "id": 780,
            "name": "AccrueInterest",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 774,
                  "indexed": false,
                  "name": "interestAccumulated",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3433:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 773,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3433:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 776,
                  "indexed": false,
                  "name": "borrowIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3462:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3462:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 778,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 780,
                  "src": "3483:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 777,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3483:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3432:72:2"
            },
            "src": "3412:93:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when tokens are minted",
            "id": 788,
            "name": "Mint",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 782,
                  "indexed": false,
                  "name": "minter",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3590:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3590:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 784,
                  "indexed": false,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3606:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3606:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 786,
                  "indexed": false,
                  "name": "mintTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 788,
                  "src": "3626:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 785,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3626:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3589:56:2"
            },
            "src": "3579:67:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when tokens are redeemed",
            "id": 796,
            "name": "Redeem",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 790,
                  "indexed": false,
                  "name": "redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3735:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 789,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3735:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 792,
                  "indexed": false,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3753:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 791,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3753:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 794,
                  "indexed": false,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 796,
                  "src": "3775:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3775:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3734:62:2"
            },
            "src": "3722:75:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when underlying is borrowed",
            "id": 806,
            "name": "Borrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 798,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3889:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 797,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3889:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 800,
                  "indexed": false,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3907:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 799,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3907:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 802,
                  "indexed": false,
                  "name": "accountBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3929:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 801,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3929:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 804,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 806,
                  "src": "3953:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 803,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3888:86:2"
            },
            "src": "3876:99:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when a borrow is repaid",
            "id": 818,
            "name": "RepayBorrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 808,
                  "indexed": false,
                  "name": "payer",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4077:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 807,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4077:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 810,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4100:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4100:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 812,
                  "indexed": false,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4126:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4126:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 814,
                  "indexed": false,
                  "name": "accountBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4155:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 813,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4155:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 816,
                  "indexed": false,
                  "name": "totalBorrows",
                  "nodeType": "VariableDeclaration",
                  "scope": 818,
                  "src": "4187:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4187:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4067:146:2"
            },
            "src": "4050:164:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when a borrow is liquidated",
            "id": 830,
            "name": "LiquidateBorrow",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 820,
                  "indexed": false,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4324:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4324:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 822,
                  "indexed": false,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4352:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4352:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "indexed": false,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4378:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4378:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 826,
                  "indexed": false,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4407:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 825,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4407:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 828,
                  "indexed": false,
                  "name": "seizeTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 830,
                  "src": "4441:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4441:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4314:152:2"
            },
            "src": "4293:174:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when pendingAdmin is changed",
            "id": 836,
            "name": "NewPendingAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 835,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 832,
                  "indexed": false,
                  "name": "oldPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 836,
                  "src": "4597:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 831,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4597:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 834,
                  "indexed": false,
                  "name": "newPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 836,
                  "src": "4622:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 833,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4622:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4596:50:2"
            },
            "src": "4575:72:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when pendingAdmin is accepted, which means admin is updated",
            "id": 842,
            "name": "NewAdmin",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 838,
                  "indexed": false,
                  "name": "oldAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "4773:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 837,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4773:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 840,
                  "indexed": false,
                  "name": "newAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 842,
                  "src": "4791:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 839,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4791:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4772:36:2"
            },
            "src": "4758:51:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when comptroller is changed",
            "id": 848,
            "name": "NewComptroller",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 844,
                  "indexed": false,
                  "name": "oldComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 848,
                  "src": "4909:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 843,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "4909:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 846,
                  "indexed": false,
                  "name": "newComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 848,
                  "src": "4946:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 845,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "4946:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4908:74:2"
            },
            "src": "4888:95:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when interestRateModel is changed",
            "id": 854,
            "name": "NewMarketInterestRateModel",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 850,
                  "indexed": false,
                  "name": "oldInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 854,
                  "src": "5101:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 849,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "5101:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 852,
                  "indexed": false,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 854,
                  "src": "5141:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 851,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "5141:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5100:80:2"
            },
            "src": "5068:113:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when the reserve factor is changed",
            "id": 860,
            "name": "NewReserveFactor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 859,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 856,
                  "indexed": false,
                  "name": "oldReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 860,
                  "src": "5290:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 855,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5290:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 858,
                  "indexed": false,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 860,
                  "src": "5324:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 857,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5324:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5289:68:2"
            },
            "src": "5267:91:2"
          },
          {
            "anonymous": false,
            "documentation": "@notice Event emitted when the reserves are reduced",
            "id": 868,
            "name": "ReservesReduced",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 862,
                  "indexed": false,
                  "name": "admin",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5461:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5461:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 864,
                  "indexed": false,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5476:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 863,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5476:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 866,
                  "indexed": false,
                  "name": "newTotalReserves",
                  "nodeType": "VariableDeclaration",
                  "scope": 868,
                  "src": "5498:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 865,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5498:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5460:63:2"
            },
            "src": "5439:85:2"
          },
          {
            "body": {
              "id": 952,
              "nodeType": "Block",
              "src": "6213:939:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 883,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "6258:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 884,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "6266:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6266:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6258:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 887,
                  "nodeType": "ExpressionStatement",
                  "src": "6258:18:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 888,
                      "name": "initialExchangeRateMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 741,
                      "src": "6324:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 889,
                      "name": "initialExchangeRateMantissa_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 874,
                      "src": "6354:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6324:58:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 891,
                  "nodeType": "ExpressionStatement",
                  "src": "6324:58:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 893,
                          "name": "initialExchangeRateMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 741,
                          "src": "6400:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6430:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6400:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e697469616c2065786368616e67652072617465206d7573742062652067726561746572207468616e207a65726f2e",
                        "id": 896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6433:50:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc602b1a08ed10fc7e07f19746d22c9030609b3ae53c307a434f3a06394237b1",
                          "typeString": "literal_string \"Initial exchange rate must be greater than zero.\""
                        },
                        "value": "Initial exchange rate must be greater than zero."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc602b1a08ed10fc7e07f19746d22c9030609b3ae53c307a434f3a06394237b1",
                          "typeString": "literal_string \"Initial exchange rate must be greater than zero.\""
                        }
                      ],
                      "id": 892,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6392:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6392:92:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 898,
                  "nodeType": "ExpressionStatement",
                  "src": "6392:92:2"
                },
                {
                  "assignments": [
                    900
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 900,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 952,
                      "src": "6526:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 899,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 904,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 902,
                        "name": "comptroller_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 870,
                        "src": "6556:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      ],
                      "id": 901,
                      "name": "_setComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4052,
                      "src": "6540:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ComptrollerInterface_$4816_$returns$_t_uint256_$",
                        "typeString": "function (contract ComptrollerInterface) returns (uint256)"
                      }
                    },
                    "id": 903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6540:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6526:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 906,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "6587:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 908,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "6602:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6602:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6594:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6594:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6587:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53657474696e6720636f6d7074726f6c6c6572206661696c6564",
                        "id": 912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6619:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_021b4888766a3fe094b45376267b3d2571ae5f587d6e16c212e0ef4955aca71a",
                          "typeString": "literal_string \"Setting comptroller failed\""
                        },
                        "value": "Setting comptroller failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_021b4888766a3fe094b45376267b3d2571ae5f587d6e16c212e0ef4955aca71a",
                          "typeString": "literal_string \"Setting comptroller failed\""
                        }
                      ],
                      "id": 905,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6579:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6579:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 914,
                  "nodeType": "ExpressionStatement",
                  "src": "6579:69:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 915,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "6764:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 916,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "6785:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 917,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6764:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 919,
                  "nodeType": "ExpressionStatement",
                  "src": "6764:37:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 920,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "6811:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 921,
                      "name": "mantissaOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5223,
                      "src": "6825:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6811:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 923,
                  "nodeType": "ExpressionStatement",
                  "src": "6811:25:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 924,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 900,
                      "src": "6927:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 926,
                          "name": "interestRateModel_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 872,
                          "src": "6960:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        ],
                        "id": 925,
                        "name": "_setInterestRateModelFresh",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4389,
                        "src": "6933:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_InterestRateModel_$5819_$returns$_t_uint256_$",
                          "typeString": "function (contract InterestRateModel) returns (uint256)"
                        }
                      },
                      "id": 927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6933:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6927:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 929,
                  "nodeType": "ExpressionStatement",
                  "src": "6927:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 931,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 900,
                          "src": "6997:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 933,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "7012:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7012:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7004:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7004:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6997:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53657474696e6720696e7465726573742072617465206d6f64656c206661696c6564",
                        "id": 937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7029:36:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3b79ab0a5afb85f78173dab5946376a2e247564a8a6fc7b3f18909f5e2809bd0",
                          "typeString": "literal_string \"Setting interest rate model failed\""
                        },
                        "value": "Setting interest rate model failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3b79ab0a5afb85f78173dab5946376a2e247564a8a6fc7b3f18909f5e2809bd0",
                          "typeString": "literal_string \"Setting interest rate model failed\""
                        }
                      ],
                      "id": 930,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "6989:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6989:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 939,
                  "nodeType": "ExpressionStatement",
                  "src": "6989:77:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 940,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 721,
                      "src": "7077:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 941,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 876,
                      "src": "7084:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7077:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 943,
                  "nodeType": "ExpressionStatement",
                  "src": "7077:12:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 944,
                      "name": "symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 723,
                      "src": "7099:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 945,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 878,
                      "src": "7108:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "7099:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 947,
                  "nodeType": "ExpressionStatement",
                  "src": "7099:16:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 948,
                      "name": "decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 725,
                      "src": "7125:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 949,
                      "name": "decimals_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 880,
                      "src": "7136:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7125:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 951,
                  "nodeType": "ExpressionStatement",
                  "src": "7125:20:2"
                }
              ]
            },
            "documentation": "@notice Construct a new money market\n@param comptroller_ The address of the Comptroller\n@param interestRateModel_ The address of the interest rate model\n@param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18\n@param name_ EIP-20 name of this token\n@param symbol_ EIP-20 symbol of this token\n@param decimals_ EIP-20 decimal precision of this token",
            "id": 953,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 870,
                  "name": "comptroller_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "5985:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 869,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "5985:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 872,
                  "name": "interestRateModel_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6028:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 871,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "6028:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 874,
                  "name": "initialExchangeRateMantissa_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6074:36:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 873,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6074:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 876,
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6120:19:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 875,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6120:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 878,
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6149:21:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 877,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 880,
                  "name": "decimals_",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "6180:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6180:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5975:228:2"
            },
            "returnParameters": {
              "id": 882,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6213:0:2"
            },
            "scope": 4422,
            "src": "5964:1188:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1160,
              "nodeType": "Block",
              "src": "7714:2159:2",
              "statements": [
                {
                  "assignments": [
                    967
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 967,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "7767:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 966,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7767:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 977,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 971,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "7821:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7813:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7813:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 973,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "7828:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 974,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "7833:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 975,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "7838:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 968,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "7785:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4791,
                      "src": "7785:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7785:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7767:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 978,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 967,
                      "src": "7859:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7870:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7859:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 990,
                  "nodeType": "IfStatement",
                  "src": "7855:142:2",
                  "trueBody": {
                    "id": 989,
                    "nodeType": "Block",
                    "src": "7873:124:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 982,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "7905:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7905:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 984,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "7934:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "7934:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 986,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 967,
                              "src": "7978:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 981,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "7894:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7894:92:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 988,
                        "nodeType": "Return",
                        "src": "7887:99:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 991,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "8053:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 992,
                      "name": "dst",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 959,
                      "src": "8060:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8053:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1002,
                  "nodeType": "IfStatement",
                  "src": "8049:103:2",
                  "trueBody": {
                    "id": 1001,
                    "nodeType": "Block",
                    "src": "8065:87:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 995,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8091:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8091:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 997,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8108:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ALLOWED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8108:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 994,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8086:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8086:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1000,
                        "nodeType": "Return",
                        "src": "8079:62:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1004
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1004,
                      "name": "startingAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8226:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1003,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8226:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1006,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8254:1:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8226:29:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1007,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 955,
                      "src": "8269:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1008,
                      "name": "src",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 957,
                      "src": "8280:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8269:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1026,
                    "nodeType": "Block",
                    "src": "8347:77:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1018,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1004,
                            "src": "8361:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1019,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 763,
                                "src": "8381:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1021,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1020,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "8400:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8381:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1023,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1022,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "8405:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8381:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8361:52:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1025,
                        "nodeType": "ExpressionStatement",
                        "src": "8361:52:2"
                      }
                    ]
                  },
                  "id": 1027,
                  "nodeType": "IfStatement",
                  "src": "8265:159:2",
                  "trueBody": {
                    "id": 1017,
                    "nodeType": "Block",
                    "src": "8285:56:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1010,
                            "name": "startingAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1004,
                            "src": "8299:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1013,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "-",
                                "prefix": true,
                                "src": "8327:2:2",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 1012,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8328:1:2",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_minus_1_by_1",
                                  "typeString": "int_const -1"
                                }
                              ],
                              "id": 1011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8319:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 1014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8319:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8299:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1016,
                        "nodeType": "ExpressionStatement",
                        "src": "8299:31:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1029,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8499:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1028,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "8499:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1030,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8499:17:2"
                },
                {
                  "assignments": [
                    1032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1032,
                      "name": "allowanceNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8526:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8526:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1033,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8526:20:2"
                },
                {
                  "assignments": [
                    1035
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1035,
                      "name": "srcTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8556:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1034,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1036,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8556:20:2"
                },
                {
                  "assignments": [
                    1038
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1038,
                      "name": "dstTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 1160,
                      "src": "8586:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1037,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8586:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1039,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8586:20:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1040,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "8618:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1041,
                          "name": "allowanceNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1032,
                          "src": "8627:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1042,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "8617:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1044,
                          "name": "startingAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1004,
                          "src": "8651:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1045,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "8670:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1043,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "8643:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8643:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "8617:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1048,
                  "nodeType": "ExpressionStatement",
                  "src": "8617:60:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1052,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1049,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "8691:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1050,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "8702:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1051,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8702:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "8691:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1061,
                  "nodeType": "IfStatement",
                  "src": "8687:123:2",
                  "trueBody": {
                    "id": 1060,
                    "nodeType": "Block",
                    "src": "8722:88:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1054,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8748:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8748:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1056,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8766:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ALLOWED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8766:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1053,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8743:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8743:56:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1059,
                        "nodeType": "Return",
                        "src": "8736:63:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1062,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "8821:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1063,
                          "name": "srcTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1035,
                          "src": "8830:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1064,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "8820:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1066,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "8854:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1068,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1067,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 957,
                            "src": "8868:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8854:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1069,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "8874:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1065,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "8846:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8846:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "8820:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1072,
                  "nodeType": "ExpressionStatement",
                  "src": "8820:61:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1073,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "8895:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1074,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "8906:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8906:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "8895:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1085,
                  "nodeType": "IfStatement",
                  "src": "8891:122:2",
                  "trueBody": {
                    "id": 1084,
                    "nodeType": "Block",
                    "src": "8926:87:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1078,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "8952:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1079,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8952:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1080,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "8970:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_NOT_ENOUGH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8970:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1077,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "8947:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8947:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1083,
                        "nodeType": "Return",
                        "src": "8940:62:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1086,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1029,
                          "src": "9024:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1087,
                          "name": "dstTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1038,
                          "src": "9033:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1088,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "9023:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1090,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "9057:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1092,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1091,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 959,
                            "src": "9071:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9057:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1093,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 961,
                          "src": "9077:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1089,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "9049:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9049:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "9023:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1096,
                  "nodeType": "ExpressionStatement",
                  "src": "9023:61:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1097,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1029,
                      "src": "9098:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1098,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "9109:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9109:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "9098:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1109,
                  "nodeType": "IfStatement",
                  "src": "9094:120:2",
                  "trueBody": {
                    "id": 1108,
                    "nodeType": "Block",
                    "src": "9129:85:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1102,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "9155:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1103,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9155:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1104,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "9173:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TRANSFER_TOO_MUCH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "9173:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 1101,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "9150:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 1106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9150:53:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 965,
                        "id": 1107,
                        "nodeType": "Return",
                        "src": "9143:60:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1110,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "9341:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1112,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1111,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9355:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9341:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1113,
                      "name": "srcTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1035,
                      "src": "9362:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9341:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1115,
                  "nodeType": "ExpressionStatement",
                  "src": "9341:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1116,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "9384:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1118,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1117,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9398:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9384:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1119,
                      "name": "dstTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1038,
                      "src": "9405:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9384:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1121,
                  "nodeType": "ExpressionStatement",
                  "src": "9384:33:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1122,
                      "name": "startingAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1004,
                      "src": "9487:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "9516:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 1124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9517:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9508:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9508:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9487:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1137,
                  "nodeType": "IfStatement",
                  "src": "9483:110:2",
                  "trueBody": {
                    "id": 1136,
                    "nodeType": "Block",
                    "src": "9521:72:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1128,
                                "name": "transferAllowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 763,
                                "src": "9535:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1131,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1129,
                                "name": "src",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 957,
                                "src": "9554:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9535:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1132,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1130,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 955,
                              "src": "9559:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9535:32:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1133,
                            "name": "allowanceNew",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1032,
                            "src": "9570:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9535:47:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1135,
                        "nodeType": "ExpressionStatement",
                        "src": "9535:47:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1139,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9656:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1140,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9661:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1141,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "9666:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1138,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "9647:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9647:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1143,
                  "nodeType": "EmitStatement",
                  "src": "9642:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1148,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "9801:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 1147,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9793:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9793:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 957,
                        "src": "9808:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1151,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 959,
                        "src": "9813:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1152,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 961,
                        "src": "9818:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1144,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "9766:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 1146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4802,
                      "src": "9766:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256) external"
                      }
                    },
                    "id": 1153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9766:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1154,
                  "nodeType": "ExpressionStatement",
                  "src": "9766:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1156,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "9851:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 1157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9851:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 1155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "9843:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 1158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9843:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 965,
                  "id": 1159,
                  "nodeType": "Return",
                  "src": "9836:30:2"
                }
              ]
            },
            "documentation": "@notice Transfer `tokens` tokens from `src` to `dst` by `spender`\n@dev Called by both `transfer` and `transferFrom` internally\n@param spender The address of the account performing the transfer\n@param src The address of the source account\n@param dst The address of the destination account\n@param tokens The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1161,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7628:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7628:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 957,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7645:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 956,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7645:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 959,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7658:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 958,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7658:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 961,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7671:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7671:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7627:59:2"
            },
            "returnParameters": {
              "id": 965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 964,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1161,
                  "src": "7705:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7705:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7704:9:2"
            },
            "scope": 4422,
            "src": "7604:2269:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1186,
              "nodeType": "Block",
              "src": "10210:102:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1184,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1173,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10242:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10242:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1175,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10254:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10254:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1177,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1163,
                          "src": "10266:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1178,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1165,
                          "src": "10271:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1172,
                        "name": "transferTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1161,
                        "src": "10227:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,address,address,uint256) returns (uint256)"
                        }
                      },
                      "id": 1179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10227:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1181,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "10290:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 1182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10290:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 1180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10282:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1183,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10282:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10227:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1171,
                  "id": 1185,
                  "nodeType": "Return",
                  "src": "10220:85:2"
                }
              ]
            },
            "documentation": "@notice Transfer `amount` tokens from `msg.sender` to `dst`\n@param dst The address of the destination account\n@param amount The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1187,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1168,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1167,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "10182:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10182:12:2"
              }
            ],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1163,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10144:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10144:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1165,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10157:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10157:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10143:29:2"
            },
            "returnParameters": {
              "id": 1171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1170,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1187,
                  "src": "10204:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1169,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10204:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10203:6:2"
            },
            "scope": 4422,
            "src": "10126:186:2",
            "stateMutability": "nonpayable",
            "superFunction": 4839,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1213,
              "nodeType": "Block",
              "src": "10711:95:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1201,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11485,
                            "src": "10743:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10743:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1203,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1189,
                          "src": "10755:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1204,
                          "name": "dst",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1191,
                          "src": "10760:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1205,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1193,
                          "src": "10765:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1200,
                        "name": "transferTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1161,
                        "src": "10728:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,address,address,uint256) returns (uint256)"
                        }
                      },
                      "id": 1206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10728:44:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1208,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "10784:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 1209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10784:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 1207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10776:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10776:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10728:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1199,
                  "id": 1212,
                  "nodeType": "Return",
                  "src": "10721:78:2"
                }
              ]
            },
            "documentation": "@notice Transfer `amount` tokens from `src` to `dst`\n@param src The address of the source account\n@param dst The address of the destination account\n@param amount The number of tokens to transfer\n@return Whether or not the transfer succeeded",
            "id": 1214,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1196,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1195,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "10683:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10683:12:2"
              }
            ],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1189,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10632:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1188,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10632:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1191,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10645:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10645:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1193,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10658:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1192,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10658:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10631:42:2"
            },
            "returnParameters": {
              "id": 1199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1198,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1214,
                  "src": "10705:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1197,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10705:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10704:6:2"
            },
            "scope": 4422,
            "src": "10610:196:2",
            "stateMutability": "nonpayable",
            "superFunction": 4850,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1244,
              "nodeType": "Block",
              "src": "11340:158:2",
              "statements": [
                {
                  "assignments": [
                    1224
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1224,
                      "name": "src",
                      "nodeType": "VariableDeclaration",
                      "scope": 1244,
                      "src": "11350:11:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1223,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11350:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1227,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1225,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11485,
                      "src": "11364:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 1226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "11364:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11350:24:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1228,
                          "name": "transferAllowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 763,
                          "src": "11384:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 1231,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1229,
                          "name": "src",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1224,
                          "src": "11403:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11384:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1232,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1230,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "11408:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11384:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1233,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1218,
                      "src": "11419:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11384:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1235,
                  "nodeType": "ExpressionStatement",
                  "src": "11384:41:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1237,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1224,
                        "src": "11449:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1238,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1216,
                        "src": "11454:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1239,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1218,
                        "src": "11463:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1236,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4884,
                      "src": "11440:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11440:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1241,
                  "nodeType": "EmitStatement",
                  "src": "11435:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11487:4:2",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1222,
                  "id": 1243,
                  "nodeType": "Return",
                  "src": "11480:11:2"
                }
              ]
            },
            "documentation": "@notice Approve `spender` to transfer up to `amount` from `src`\n@dev This will overwrite the approval amount for `spender`\n and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n@param spender The address of the account which may transfer tokens\n@param amount The number of tokens that are approved (-1 means infinite)\n@return Whether or not the approval succeeded",
            "id": 1245,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1219,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1216,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11283:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1215,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11283:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1218,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11300:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1217,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11300:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11282:33:2"
            },
            "returnParameters": {
              "id": 1222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1221,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1245,
                  "src": "11334:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1220,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11334:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11333:6:2"
            },
            "scope": 4422,
            "src": "11266:232:2",
            "stateMutability": "nonpayable",
            "superFunction": 4859,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1260,
              "nodeType": "Block",
              "src": "11903:58:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1254,
                        "name": "transferAllowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 763,
                        "src": "11920:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 1256,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1255,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1247,
                        "src": "11939:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11920:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1258,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1257,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1249,
                      "src": "11946:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11920:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1253,
                  "id": 1259,
                  "nodeType": "Return",
                  "src": "11913:41:2"
                }
              ]
            },
            "documentation": "@notice Get the current allowance from `owner` for `spender`\n@param owner The address of the account which owns the tokens to be spent\n@param spender The address of the account which may transfer tokens\n@return The number of tokens allowed to be spent (-1 means infinite)",
            "id": 1261,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1247,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11839:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11839:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1249,
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11854:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1248,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11854:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11838:32:2"
            },
            "returnParameters": {
              "id": 1253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1252,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1261,
                  "src": "11894:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11894:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11893:9:2"
            },
            "scope": 4422,
            "src": "11820:141:2",
            "stateMutability": "view",
            "superFunction": 4868,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1272,
              "nodeType": "Block",
              "src": "12210:44:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1268,
                      "name": "accountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 757,
                      "src": "12227:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1270,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1269,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1263,
                      "src": "12241:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12227:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1267,
                  "id": 1271,
                  "nodeType": "Return",
                  "src": "12220:27:2"
                }
              ]
            },
            "documentation": "@notice Get the token balance of the `owner`\n@param owner The address of the account to query\n@return The number of tokens owned by `owner`",
            "id": 1273,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1263,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1273,
                  "src": "12163:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12163:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12162:15:2"
            },
            "returnParameters": {
              "id": 1267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1266,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1273,
                  "src": "12201:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12201:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12200:9:2"
            },
            "scope": 4422,
            "src": "12144:110:2",
            "stateMutability": "view",
            "superFunction": 4830,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1307,
              "nodeType": "Block",
              "src": "12573:249:2",
              "statements": [
                {
                  "assignments": [
                    1281
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1281,
                      "name": "exchangeRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12583:23:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1280,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "12583:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1286,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1283,
                          "name": "exchangeRateCurrent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1712,
                          "src": "12624:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                            "typeString": "function () returns (uint256)"
                          }
                        },
                        "id": 1284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12624:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1282,
                      "name": "Exp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5226,
                      "src": "12609:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                        "typeString": "type(struct Exponential.Exp storage pointer)"
                      }
                    },
                    "id": 1285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "mantissa"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "12609:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Exp_$5226_memory",
                      "typeString": "struct Exponential.Exp memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12583:64:2"
                },
                {
                  "assignments": [
                    1288,
                    1290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1288,
                      "name": "mErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12658:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1287,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "12658:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1290,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1307,
                      "src": "12674:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1289,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12674:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1297,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1292,
                        "name": "exchangeRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1281,
                        "src": "12711:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1293,
                          "name": "accountTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 757,
                          "src": "12725:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 1295,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1294,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1275,
                          "src": "12739:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12725:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1291,
                      "name": "mulScalarTruncate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5424,
                      "src": "12693:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12693:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12657:89:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1299,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1288,
                          "src": "12764:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1300,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "12772:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12772:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "12764:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1298,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11488,
                      "src": "12756:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12756:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1304,
                  "nodeType": "ExpressionStatement",
                  "src": "12756:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1305,
                    "name": "balance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1290,
                    "src": "12808:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1279,
                  "id": 1306,
                  "nodeType": "Return",
                  "src": "12801:14:2"
                }
              ]
            },
            "documentation": "@notice Get the underlying balance of the `owner`\n@dev This also accrues interest in a transaction\n@param owner The address of the account to query\n@return The amount of underlying owned by `owner`",
            "id": 1308,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1275,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1308,
                  "src": "12531:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12531:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12530:15:2"
            },
            "returnParameters": {
              "id": 1279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1278,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1308,
                  "src": "12564:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1277,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12564:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12563:9:2"
            },
            "scope": 4422,
            "src": "12502:320:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1390,
              "nodeType": "Block",
              "src": "13264:611:2",
              "statements": [
                {
                  "assignments": [
                    1322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1322,
                      "name": "cTokenBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13274:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1321,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13274:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1326,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1323,
                      "name": "accountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 757,
                      "src": "13298:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1325,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1324,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1310,
                      "src": "13312:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13298:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13274:46:2"
                },
                {
                  "assignments": [
                    1328
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1328,
                      "name": "borrowBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13330:21:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1327,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13330:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1329,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13330:21:2"
                },
                {
                  "assignments": [
                    1331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1331,
                      "name": "exchangeRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13361:28:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1330,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13361:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1332,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13361:28:2"
                },
                {
                  "assignments": [
                    1334
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1334,
                      "name": "mErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1390,
                      "src": "13400:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1333,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "13400:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1335,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13400:14:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1336,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1334,
                          "src": "13426:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1337,
                          "name": "borrowBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1328,
                          "src": "13432:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1338,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "13425:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1340,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1310,
                          "src": "13477:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1339,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "13449:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13449:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "13425:60:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1343,
                  "nodeType": "ExpressionStatement",
                  "src": "13425:60:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1344,
                      "name": "mErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1334,
                      "src": "13499:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1345,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "13507:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13507:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "13499:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1358,
                  "nodeType": "IfStatement",
                  "src": "13495:100:2",
                  "trueBody": {
                    "id": 1357,
                    "nodeType": "Block",
                    "src": "13527:68:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1349,
                                    "name": "Error",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "13557:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                      "typeString": "type(enum TokenErrorReporter.Error)"
                                    }
                                  },
                                  "id": 1350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "MATH_ERROR",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13557:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                ],
                                "id": 1348,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13549:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13549:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1352,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13576:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13579:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13582:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13548:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(uint256,int_const 0,int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1320,
                        "id": 1356,
                        "nodeType": "Return",
                        "src": "13541:43:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1359,
                          "name": "mErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1334,
                          "src": "13606:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1360,
                          "name": "exchangeRateMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1331,
                          "src": "13612:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1361,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "13605:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1362,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "13636:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13636:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "13605:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1365,
                  "nodeType": "ExpressionStatement",
                  "src": "13605:59:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1366,
                      "name": "mErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1334,
                      "src": "13678:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1367,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "13686:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13686:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "13678:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1380,
                  "nodeType": "IfStatement",
                  "src": "13674:100:2",
                  "trueBody": {
                    "id": 1379,
                    "nodeType": "Block",
                    "src": "13706:68:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1371,
                                    "name": "Error",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5069,
                                    "src": "13736:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                      "typeString": "type(enum TokenErrorReporter.Error)"
                                    }
                                  },
                                  "id": 1372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "MATH_ERROR",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "13736:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Error_$5069",
                                    "typeString": "enum TokenErrorReporter.Error"
                                  }
                                ],
                                "id": 1370,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13728:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13728:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13755:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1375,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13758:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13761:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1377,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13727:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(uint256,int_const 0,int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1320,
                        "id": 1378,
                        "nodeType": "Return",
                        "src": "13720:43:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1382,
                              "name": "Error",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5069,
                              "src": "13800:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                "typeString": "type(enum TokenErrorReporter.Error)"
                              }
                            },
                            "id": 1383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13800:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 1381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13792:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 1384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13792:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1385,
                        "name": "cTokenBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1322,
                        "src": "13817:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1386,
                        "name": "borrowBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1328,
                        "src": "13832:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1387,
                        "name": "exchangeRateMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1331,
                        "src": "13847:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 1388,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13791:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 1320,
                  "id": 1389,
                  "nodeType": "Return",
                  "src": "13784:84:2"
                }
              ]
            },
            "documentation": "@notice Get a snapshot of the account's balances, and the cached exchange rate\n@dev This is used by comptroller to more efficiently perform liquidity checks.\n@param account Address of the account to snapshot\n@return (possible error, token balance, borrow balance, exchange rate mantissa)",
            "id": 1391,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAccountSnapshot",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1311,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1310,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13188:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1309,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13188:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13187:17:2"
            },
            "returnParameters": {
              "id": 1320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1313,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13228:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1312,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13228:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13237:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13237:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1317,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13246:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1316,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13246:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1319,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1391,
                  "src": "13255:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13255:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13227:36:2"
            },
            "scope": 4422,
            "src": "13160:715:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1399,
              "nodeType": "Block",
              "src": "14086:36:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1396,
                      "name": "block",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11475,
                      "src": "14103:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_block",
                        "typeString": "block"
                      }
                    },
                    "id": 1397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "number",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "14103:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1395,
                  "id": 1398,
                  "nodeType": "Return",
                  "src": "14096:19:2"
                }
              ]
            },
            "documentation": "@dev Function to simply retrieve block number\n This exists mainly for inheriting test contracts to stub this result.",
            "id": 1400,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBlockNumber",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14051:2:2"
            },
            "returnParameters": {
              "id": 1395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1394,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1400,
                  "src": "14077:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14077:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14076:9:2"
            },
            "scope": 4422,
            "src": "14028:94:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1426,
              "nodeType": "Block",
              "src": "14354:331:2",
              "statements": [
                {
                  "assignments": [
                    1406,
                    1408
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1406,
                      "name": "opaqueErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1426,
                      "src": "14365:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1405,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14365:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1408,
                      "name": "borrowRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1426,
                      "src": "14384:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1407,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14384:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1416,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1411,
                          "name": "getCashPrior",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4394,
                          "src": "14459:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14459:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1413,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "14487:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1414,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "14513:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1409,
                        "name": "interestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "14414:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "id": 1410,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5813,
                      "src": "14414:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 1415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14414:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14364:172:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1418,
                          "name": "opaqueErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1406,
                          "src": "14554:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14567:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14554:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f7752617465506572426c6f636b3a20696e746572657374526174654d6f64656c2e626f72726f7752617465206661696c6564",
                        "id": 1421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14570:57:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2632d6009e621d16eeea426ae3a605e809011e822fba4dd42ad39bd0871d90c",
                          "typeString": "literal_string \"borrowRatePerBlock: interestRateModel.borrowRate failed\""
                        },
                        "value": "borrowRatePerBlock: interestRateModel.borrowRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2632d6009e621d16eeea426ae3a605e809011e822fba4dd42ad39bd0871d90c",
                          "typeString": "literal_string \"borrowRatePerBlock: interestRateModel.borrowRate failed\""
                        }
                      ],
                      "id": 1417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "14546:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14546:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1423,
                  "nodeType": "ExpressionStatement",
                  "src": "14546:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1424,
                    "name": "borrowRateMantissa",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1408,
                    "src": "14660:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1404,
                  "id": 1425,
                  "nodeType": "Return",
                  "src": "14653:25:2"
                }
              ]
            },
            "documentation": "@notice Returns the current per-block borrow interest rate for this cToken\n@return The borrow interest rate per block, scaled by 1e18",
            "id": 1427,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowRatePerBlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14319:2:2"
            },
            "returnParameters": {
              "id": 1404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1403,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1427,
                  "src": "14345:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14345:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14344:9:2"
            },
            "scope": 4422,
            "src": "14292:393:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1536,
              "nodeType": "Block",
              "src": "14917:1550:2",
              "statements": [
                {
                  "assignments": [
                    1433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1433,
                      "name": "exchangeRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15156:28:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1432,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15156:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1436,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1434,
                      "name": "exchangeRateStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "15187:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15187:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15156:51:2"
                },
                {
                  "assignments": [
                    1438,
                    1440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1438,
                      "name": "e0",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15219:10:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1437,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15219:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1440,
                      "name": "borrowRateMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15231:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1439,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15231:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1448,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1443,
                          "name": "getCashPrior",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4394,
                          "src": "15306:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 1444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15306:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1445,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "15334:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1446,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "15360:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1441,
                        "name": "interestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 739,
                        "src": "15261:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "id": 1442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5813,
                      "src": "15261:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 1447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15261:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15218:165:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1450,
                          "name": "e0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1438,
                          "src": "15401:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15407:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15401:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7752617465206661696c6564",
                        "id": 1453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15410:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a6c999b4916221d3605b6a71ee27723e9d9e2d4803d1324e772f17b965fbf216",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowRate failed\""
                        },
                        "value": "supplyRatePerBlock: calculating borrowRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a6c999b4916221d3605b6a71ee27723e9d9e2d4803d1324e772f17b965fbf216",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowRate failed\""
                        }
                      ],
                      "id": 1449,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15393:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15393:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1455,
                  "nodeType": "ExpressionStatement",
                  "src": "15393:69:2"
                },
                {
                  "assignments": [
                    1457,
                    1459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1457,
                      "name": "e1",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15489:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1456,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15489:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1459,
                      "name": "underlying",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15503:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1458,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15503:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1466,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1462,
                            "name": "exchangeRateMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1433,
                            "src": "15553:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1461,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15538:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15538:37:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1464,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 753,
                        "src": "15577:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1460,
                      "name": "mulScalar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5386,
                      "src": "15528:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15528:61:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15488:101:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1471,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1468,
                          "name": "e1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1457,
                          "src": "15607:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1469,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "15613:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15613:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "15607:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720756e6465726c79696e67206661696c6564",
                        "id": 1472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15633:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ab41aa94568cf71d54c9607b85c5ad309cb5419e821301d65e8961fc4d748f3",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating underlying failed\""
                        },
                        "value": "supplyRatePerBlock: calculating underlying failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ab41aa94568cf71d54c9607b85c5ad309cb5419e821301d65e8961fc4d748f3",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating underlying failed\""
                        }
                      ],
                      "id": 1467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15599:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15599:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1474,
                  "nodeType": "ExpressionStatement",
                  "src": "15599:86:2"
                },
                {
                  "assignments": [
                    1476,
                    1478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1476,
                      "name": "e2",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15697:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1475,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15697:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1478,
                      "name": "borrowsPer",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15711:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1477,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15711:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1483,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1480,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "15751:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1481,
                        "name": "underlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "15765:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1479,
                      "name": "divScalarByExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5544,
                      "src": "15736:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15736:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15696:80:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1485,
                          "name": "e2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1476,
                          "src": "15794:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1486,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "15800:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "15800:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "15794:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720626f72726f7773506572206661696c6564",
                        "id": 1489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15820:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_23d703eca9ecff1ad872cb6b80905166f048c1bf1a3a2a091debe587db4b3086",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowsPer failed\""
                        },
                        "value": "supplyRatePerBlock: calculating borrowsPer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_23d703eca9ecff1ad872cb6b80905166f048c1bf1a3a2a091debe587db4b3086",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating borrowsPer failed\""
                        }
                      ],
                      "id": 1484,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "15786:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15786:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1491,
                  "nodeType": "ExpressionStatement",
                  "src": "15786:86:2"
                },
                {
                  "assignments": [
                    1493,
                    1495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1493,
                      "name": "e3",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15884:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1492,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "15884:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1495,
                      "name": "oneMinusReserveFactor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "15898:32:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1494,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "15898:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1504,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1498,
                            "name": "mantissaOne",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5223,
                            "src": "15969:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1497,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15954:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15954:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1501,
                            "name": "reserveFactorMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 743,
                            "src": "16011:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1500,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "15996:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15996:38:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1496,
                      "name": "subExp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5345,
                      "src": "15934:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15934:110:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15883:161:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1506,
                          "name": "e3",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1493,
                          "src": "16062:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1507,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "16068:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "16068:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "16062:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e67206f6e654d696e757352657365727665466163746f72206661696c6564",
                        "id": 1510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16088:62:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b498901816e4ef82201a022e22bcc6acb7786f1e11debe4dae0d80af8abbb143",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating oneMinusReserveFactor failed\""
                        },
                        "value": "supplyRatePerBlock: calculating oneMinusReserveFactor failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b498901816e4ef82201a022e22bcc6acb7786f1e11debe4dae0d80af8abbb143",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating oneMinusReserveFactor failed\""
                        }
                      ],
                      "id": 1505,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16054:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16054:97:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1512,
                  "nodeType": "ExpressionStatement",
                  "src": "16054:97:2"
                },
                {
                  "assignments": [
                    1514,
                    1516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1514,
                      "name": "e4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "16163:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1513,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "16163:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1516,
                      "name": "supplyRate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1536,
                      "src": "16177:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1515,
                        "name": "Exp",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5226,
                        "src": "16177:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                          "typeString": "struct Exponential.Exp"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1524,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1519,
                            "name": "borrowRateMantissa",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1440,
                            "src": "16238:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 1518,
                          "name": "Exp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5226,
                          "src": "16223:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                            "typeString": "type(struct Exponential.Exp storage pointer)"
                          }
                        },
                        "id": 1520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "mantissa"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "16223:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1521,
                        "name": "oneMinusReserveFactor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1495,
                        "src": "16272:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1522,
                        "name": "borrowsPer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1478,
                        "src": "16307:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                          "typeString": "struct Exponential.Exp memory"
                        }
                      ],
                      "id": 1517,
                      "name": "mulExp3",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5720,
                      "src": "16202:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "function (struct Exponential.Exp memory,struct Exponential.Exp memory,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "id": 1523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16202:125:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                      "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16162:165:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1526,
                          "name": "e4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1514,
                          "src": "16345:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1527,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "16351:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "16351:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "16345:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "737570706c7952617465506572426c6f636b3a2063616c63756c6174696e6720737570706c7952617465206661696c6564",
                        "id": 1530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16371:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6d0b372024ce395b258eed06f15680143185aaef9b81b07ef9a9363d58b8b389",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating supplyRate failed\""
                        },
                        "value": "supplyRatePerBlock: calculating supplyRate failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6d0b372024ce395b258eed06f15680143185aaef9b81b07ef9a9363d58b8b389",
                          "typeString": "literal_string \"supplyRatePerBlock: calculating supplyRate failed\""
                        }
                      ],
                      "id": 1525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16337:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16337:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1532,
                  "nodeType": "ExpressionStatement",
                  "src": "16337:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 1533,
                      "name": "supplyRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1516,
                      "src": "16441:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                        "typeString": "struct Exponential.Exp memory"
                      }
                    },
                    "id": 1534,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "mantissa",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 5225,
                    "src": "16441:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1431,
                  "id": 1535,
                  "nodeType": "Return",
                  "src": "16434:26:2"
                }
              ]
            },
            "documentation": "@notice Returns the current per-block supply interest rate for this cToken\n@return The supply interest rate per block, scaled by 1e18",
            "id": 1537,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supplyRatePerBlock",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14882:2:2"
            },
            "returnParameters": {
              "id": 1431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1430,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1537,
                  "src": "14908:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14908:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14907:9:2"
            },
            "scope": 4422,
            "src": "14855:1612:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1557,
              "nodeType": "Block",
              "src": "16678:124:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1545,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "16696:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16696:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1548,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "16724:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "16724:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16716:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16716:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16696:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16741:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1544,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "16688:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16688:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1554,
                  "nodeType": "ExpressionStatement",
                  "src": "16688:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1555,
                    "name": "totalBorrows",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 749,
                    "src": "16783:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1543,
                  "id": 1556,
                  "nodeType": "Return",
                  "src": "16776:19:2"
                }
              ]
            },
            "documentation": "@notice Returns the current total borrows plus accrued interest\n@return The total borrows with interest",
            "id": 1558,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1540,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1539,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "16647:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16647:12:2"
              }
            ],
            "name": "totalBorrowsCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16635:2:2"
            },
            "returnParameters": {
              "id": 1543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1542,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1558,
                  "src": "16669:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16669:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16668:9:2"
            },
            "scope": 4422,
            "src": "16607:195:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1582,
              "nodeType": "Block",
              "src": "17173:140:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1574,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1568,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "17191:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17191:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1571,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "17219:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "17219:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17211:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17211:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17191:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1575,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17236:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1567,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17183:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17183:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1577,
                  "nodeType": "ExpressionStatement",
                  "src": "17183:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1579,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1560,
                        "src": "17298:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1578,
                      "name": "borrowBalanceStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1609,
                      "src": "17278:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 1580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17278:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1566,
                  "id": 1581,
                  "nodeType": "Return",
                  "src": "17271:35:2"
                }
              ]
            },
            "documentation": "@notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex\n@param account The address whose balance should be calculated after updating borrowIndex\n@return The calculated balance",
            "id": 1583,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1563,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1562,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "17142:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17142:12:2"
              }
            ],
            "name": "borrowBalanceCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1560,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1583,
                  "src": "17116:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17116:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17115:17:2"
            },
            "returnParameters": {
              "id": 1566,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1565,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1583,
                  "src": "17164:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17164:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17163:9:2"
            },
            "scope": 4422,
            "src": "17086:227:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1608,
              "nodeType": "Block",
              "src": "17591:213:2",
              "statements": [
                {
                  "assignments": [
                    1591,
                    1593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1591,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 1608,
                      "src": "17602:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1590,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "17602:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1593,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1608,
                      "src": "17617:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17617:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1597,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1595,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1585,
                        "src": "17663:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1594,
                      "name": "borrowBalanceStoredInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1690,
                      "src": "17635:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17635:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17601:70:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1599,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1591,
                          "src": "17689:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1600,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "17696:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "17696:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "17689:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f7742616c616e636553746f7265643a20626f72726f7742616c616e636553746f726564496e7465726e616c206661696c6564",
                        "id": 1603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17716:57:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8825dc702edb5f60088d39fa3a6dc2db62be3613ea83047e025f5e671831b860",
                          "typeString": "literal_string \"borrowBalanceStored: borrowBalanceStoredInternal failed\""
                        },
                        "value": "borrowBalanceStored: borrowBalanceStoredInternal failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8825dc702edb5f60088d39fa3a6dc2db62be3613ea83047e025f5e671831b860",
                          "typeString": "literal_string \"borrowBalanceStored: borrowBalanceStoredInternal failed\""
                        }
                      ],
                      "id": 1598,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "17681:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1604,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17681:93:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1605,
                  "nodeType": "ExpressionStatement",
                  "src": "17681:93:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1606,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1593,
                    "src": "17791:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1589,
                  "id": 1607,
                  "nodeType": "Return",
                  "src": "17784:13:2"
                }
              ]
            },
            "documentation": "@notice Return the borrow balance of account based on stored data\n@param account The address whose balance should be calculated\n@return The calculated balance",
            "id": 1609,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowBalanceStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1585,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1609,
                  "src": "17544:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17544:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17543:17:2"
            },
            "returnParameters": {
              "id": 1589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1588,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1609,
                  "src": "17582:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17582:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17581:9:2"
            },
            "scope": 4422,
            "src": "17515:289:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1689,
              "nodeType": "Block",
              "src": "18148:1150:2",
              "statements": [
                {
                  "assignments": [
                    1619
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1619,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18225:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1618,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "18225:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1620,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18225:17:2"
                },
                {
                  "assignments": [
                    1622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1622,
                      "name": "principalTimesIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18252:27:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1621,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18252:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1623,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18252:27:2"
                },
                {
                  "assignments": [
                    1625
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1625,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18289:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1624,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18289:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1626,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18289:14:2"
                },
                {
                  "assignments": [
                    1628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1628,
                      "name": "borrowSnapshot",
                      "nodeType": "VariableDeclaration",
                      "scope": 1689,
                      "src": "18362:37:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                        "typeString": "struct CToken.BorrowSnapshot"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1627,
                        "name": "BorrowSnapshot",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 768,
                        "src": "18362:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                          "typeString": "struct CToken.BorrowSnapshot"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1632,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1629,
                      "name": "accountBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 772,
                      "src": "18402:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                        "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                      }
                    },
                    "id": 1631,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1630,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1611,
                      "src": "18417:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18402:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                      "typeString": "struct CToken.BorrowSnapshot storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18362:63:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1633,
                        "name": "borrowSnapshot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1628,
                        "src": "18626:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                          "typeString": "struct CToken.BorrowSnapshot storage pointer"
                        }
                      },
                      "id": 1634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "18626:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18654:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18626:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1643,
                  "nodeType": "IfStatement",
                  "src": "18622:90:2",
                  "trueBody": {
                    "id": 1642,
                    "nodeType": "Block",
                    "src": "18657:55:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1637,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "18679:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1638,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "18679:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18699:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1640,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "18678:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1641,
                        "nodeType": "Return",
                        "src": "18671:30:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1644,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1619,
                          "src": "18902:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1645,
                          "name": "principalTimesIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "18911:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1646,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "18901:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1648,
                            "name": "borrowSnapshot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "18942:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                              "typeString": "struct CToken.BorrowSnapshot storage pointer"
                            }
                          },
                          "id": 1649,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "principal",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 765,
                          "src": "18942:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1650,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "18968:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1647,
                        "name": "mulUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4475,
                        "src": "18934:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18934:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "18901:79:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1653,
                  "nodeType": "ExpressionStatement",
                  "src": "18901:79:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1654,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1619,
                      "src": "18994:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1655,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "19005:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19005:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "18994:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1663,
                  "nodeType": "IfStatement",
                  "src": "18990:79:2",
                  "trueBody": {
                    "id": 1662,
                    "nodeType": "Block",
                    "src": "19025:44:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 1658,
                              "name": "mathErr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1619,
                              "src": "19047:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19056:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1660,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19046:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1661,
                        "nodeType": "Return",
                        "src": "19039:19:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1664,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1619,
                          "src": "19080:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1665,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1625,
                          "src": "19089:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1666,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "19079:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1668,
                          "name": "principalTimesIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1622,
                          "src": "19107:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1669,
                            "name": "borrowSnapshot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1628,
                            "src": "19128:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage_ptr",
                              "typeString": "struct CToken.BorrowSnapshot storage pointer"
                            }
                          },
                          "id": 1670,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestIndex",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 767,
                          "src": "19128:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1667,
                        "name": "divUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4504,
                        "src": "19099:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19099:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "19079:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1673,
                  "nodeType": "ExpressionStatement",
                  "src": "19079:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1674,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1619,
                      "src": "19171:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1675,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "19182:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19182:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "19171:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1683,
                  "nodeType": "IfStatement",
                  "src": "19167:79:2",
                  "trueBody": {
                    "id": 1682,
                    "nodeType": "Block",
                    "src": "19202:44:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 1678,
                              "name": "mathErr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1619,
                              "src": "19224:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 1679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19233:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 1680,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "19223:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                            "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 1617,
                        "id": 1681,
                        "nodeType": "Return",
                        "src": "19216:19:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1684,
                          "name": "MathError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4429,
                          "src": "19264:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                            "typeString": "type(enum CarefulMath.MathError)"
                          }
                        },
                        "id": 1685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "19264:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1686,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1625,
                        "src": "19284:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 1687,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "19263:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "functionReturnParameters": 1617,
                  "id": 1688,
                  "nodeType": "Return",
                  "src": "19256:35:2"
                }
              ]
            },
            "documentation": "@notice Return the borrow balance of account based on stored data\n@param account The address whose balance should be calculated\n@return (error code, the calculated balance or 0 if error code is non-zero)",
            "id": 1690,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowBalanceStoredInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1611,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18088:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1610,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18088:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18087:17:2"
            },
            "returnParameters": {
              "id": 1617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1614,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18128:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1613,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "18128:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1616,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1690,
                  "src": "18139:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1615,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18139:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18127:20:2"
            },
            "scope": 4422,
            "src": "18051:1247:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1711,
              "nodeType": "Block",
              "src": "19516:132:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1704,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1698,
                            "name": "accrueInterest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2113,
                            "src": "19534:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 1699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19534:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1701,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "19562:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1702,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19562:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 1700,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "19554:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 1703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19554:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19534:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "61636372756520696e746572657374206661696c6564",
                        "id": 1705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19579:24:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        },
                        "value": "accrue interest failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0ae1c3a6990b014f49c6cecca4c55d4276bada05d5796bb1e12f259b29f3de8e",
                          "typeString": "literal_string \"accrue interest failed\""
                        }
                      ],
                      "id": 1697,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "19526:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19526:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1707,
                  "nodeType": "ExpressionStatement",
                  "src": "19526:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1708,
                      "name": "exchangeRateStored",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1735,
                      "src": "19621:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19621:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1696,
                  "id": 1710,
                  "nodeType": "Return",
                  "src": "19614:27:2"
                }
              ]
            },
            "documentation": "@notice Accrue interest then return the up-to-date exchange rate\n@return Calculated exchange rate scaled by 1e18",
            "id": 1712,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1693,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1692,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "19485:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19485:12:2"
              }
            ],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19475:2:2"
            },
            "returnParameters": {
              "id": 1696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1695,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1712,
                  "src": "19507:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19507:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19506:9:2"
            },
            "scope": 4422,
            "src": "19447:201:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "19951:203:2",
              "statements": [
                {
                  "assignments": [
                    1718,
                    1720
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1718,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 1734,
                      "src": "19962:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1717,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "19962:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1720,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 1734,
                      "src": "19977:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1719,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "19977:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1723,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1721,
                      "name": "exchangeRateStoredInternal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1813,
                      "src": "19995:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "id": 1722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19995:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                      "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19961:62:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1725,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1718,
                          "src": "20041:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1726,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "20048:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "20048:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "20041:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "65786368616e67655261746553746f7265643a2065786368616e67655261746553746f726564496e7465726e616c206661696c6564",
                        "id": 1729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20068:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dbb9242fc3facb546962a4d074b33f7d1e2606e6817021a0c962231003173b9b",
                          "typeString": "literal_string \"exchangeRateStored: exchangeRateStoredInternal failed\""
                        },
                        "value": "exchangeRateStored: exchangeRateStoredInternal failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dbb9242fc3facb546962a4d074b33f7d1e2606e6817021a0c962231003173b9b",
                          "typeString": "literal_string \"exchangeRateStored: exchangeRateStoredInternal failed\""
                        }
                      ],
                      "id": 1724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "20033:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20033:91:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1731,
                  "nodeType": "ExpressionStatement",
                  "src": "20033:91:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1732,
                    "name": "result",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1720,
                    "src": "20141:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1716,
                  "id": 1733,
                  "nodeType": "Return",
                  "src": "20134:13:2"
                }
              ]
            },
            "documentation": "@notice Calculates the exchange rate from the underlying to the CToken\n@dev This function does not accrue interest before calculating the exchange rate\n@return Calculated exchange rate scaled by 1e18",
            "id": 1735,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19918:2:2"
            },
            "returnParameters": {
              "id": 1716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1715,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1735,
                  "src": "19942:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1714,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19942:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19941:9:2"
            },
            "scope": 4422,
            "src": "19891:263:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1812,
              "nodeType": "Block",
              "src": "20492:1041:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1742,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "20506:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20521:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20506:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1810,
                    "nodeType": "Block",
                    "src": "20739:788:2",
                    "statements": [
                      {
                        "assignments": [
                          1752
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1752,
                            "name": "totalCash",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20898:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1751,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20898:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1755,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1753,
                            "name": "getCashPrior",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4394,
                            "src": "20918:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20918:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20898:34:2"
                      },
                      {
                        "assignments": [
                          1757
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1757,
                            "name": "cashPlusBorrowsMinusReserves",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20946:36:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1756,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20946:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1758,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20946:36:2"
                      },
                      {
                        "assignments": [
                          1760
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1760,
                            "name": "exchangeRate",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "20996:23:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                              "typeString": "struct Exponential.Exp"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1759,
                              "name": "Exp",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 5226,
                              "src": "20996:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                                "typeString": "struct Exponential.Exp"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1761,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20996:23:2"
                      },
                      {
                        "assignments": [
                          1763
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1763,
                            "name": "mathErr",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "21033:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1762,
                              "name": "MathError",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4429,
                              "src": "21033:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1764,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "21033:17:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 1765,
                                "name": "mathErr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1763,
                                "src": "21066:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1766,
                                "name": "cashPlusBorrowsMinusReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "21075:28:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1767,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "21065:39:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1769,
                                "name": "totalCash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1752,
                                "src": "21122:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1770,
                                "name": "totalBorrows",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 749,
                                "src": "21133:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1771,
                                "name": "totalReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 751,
                                "src": "21147:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1768,
                              "name": "addThenSubUInt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4606,
                              "src": "21107:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 1772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21107:54:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "21065:96:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1774,
                        "nodeType": "ExpressionStatement",
                        "src": "21065:96:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1775,
                            "name": "mathErr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1763,
                            "src": "21179:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1776,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "21190:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 1777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21190:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "21179:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1784,
                        "nodeType": "IfStatement",
                        "src": "21175:87:2",
                        "trueBody": {
                          "id": 1783,
                          "nodeType": "Block",
                          "src": "21210:52:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1779,
                                    "name": "mathErr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1763,
                                    "src": "21236:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_MathError_$4429",
                                      "typeString": "enum CarefulMath.MathError"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21245:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "id": 1781,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21235:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                                  "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                                }
                              },
                              "functionReturnParameters": 1741,
                              "id": 1782,
                              "nodeType": "Return",
                              "src": "21228:19:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 1785,
                                "name": "mathErr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1763,
                                "src": "21277:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1786,
                                "name": "exchangeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "21286:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              }
                            ],
                            "id": 1787,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "21276:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                              "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1789,
                                "name": "cashPlusBorrowsMinusReserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "21309:28:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1790,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 753,
                                "src": "21339:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1788,
                              "name": "getExp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5287,
                              "src": "21302:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                                "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                              }
                            },
                            "id": 1791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21302:49:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                              "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                            }
                          },
                          "src": "21276:75:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1793,
                        "nodeType": "ExpressionStatement",
                        "src": "21276:75:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 1797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1794,
                            "name": "mathErr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1763,
                            "src": "21369:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1795,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "21380:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 1796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21380:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "21369:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1803,
                        "nodeType": "IfStatement",
                        "src": "21365:87:2",
                        "trueBody": {
                          "id": 1802,
                          "nodeType": "Block",
                          "src": "21400:52:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1798,
                                    "name": "mathErr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1763,
                                    "src": "21426:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_MathError_$4429",
                                      "typeString": "enum CarefulMath.MathError"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1799,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21435:1:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "id": 1800,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21425:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_rational_0_by_1_$",
                                  "typeString": "tuple(enum CarefulMath.MathError,int_const 0)"
                                }
                              },
                              "functionReturnParameters": 1741,
                              "id": 1801,
                              "nodeType": "Return",
                              "src": "21418:19:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1804,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "21474:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "21474:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1806,
                                "name": "exchangeRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "21494:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory_ptr",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              },
                              "id": 1807,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5225,
                              "src": "21494:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 1808,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "21473:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                            "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                          }
                        },
                        "functionReturnParameters": 1741,
                        "id": 1809,
                        "nodeType": "Return",
                        "src": "21466:50:2"
                      }
                    ]
                  },
                  "id": 1811,
                  "nodeType": "IfStatement",
                  "src": "20502:1025:2",
                  "trueBody": {
                    "id": 1750,
                    "nodeType": "Block",
                    "src": "20524:209:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1745,
                                "name": "MathError",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4429,
                                "src": "20674:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                  "typeString": "type(enum CarefulMath.MathError)"
                                }
                              },
                              "id": 1746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "20674:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_MathError_$4429",
                                "typeString": "enum CarefulMath.MathError"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1747,
                              "name": "initialExchangeRateMantissa",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "20694:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 1748,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "20673:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                            "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                          }
                        },
                        "functionReturnParameters": 1741,
                        "id": 1749,
                        "nodeType": "Return",
                        "src": "20666:56:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Calculates the exchange rate from the underlying to the CToken\n@dev This function does not accrue interest before calculating the exchange rate\n@return (error code, calculated exchange rate scaled by 1e18)",
            "id": 1813,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStoredInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20446:2:2"
            },
            "returnParameters": {
              "id": 1741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1738,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1813,
                  "src": "20472:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1737,
                    "name": "MathError",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4429,
                    "src": "20472:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1740,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1813,
                  "src": "20483:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1739,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20483:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20471:20:2"
            },
            "scope": 4422,
            "src": "20411:1122:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1821,
              "nodeType": "Block",
              "src": "21748:38:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1818,
                      "name": "getCashPrior",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4394,
                      "src": "21765:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21765:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1817,
                  "id": 1820,
                  "nodeType": "Return",
                  "src": "21758:21:2"
                }
              ]
            },
            "documentation": "@notice Get cash balance of this cToken in the underlying asset\n@return The quantity of underlying asset owned by this contract",
            "id": 1822,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1814,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21713:2:2"
            },
            "returnParameters": {
              "id": 1817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1816,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1822,
                  "src": "21739:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21739:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21738:9:2"
            },
            "scope": 4422,
            "src": "21697:89:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "canonicalName": "CToken.AccrueInterestLocalVars",
            "id": 1843,
            "members": [
              {
                "constant": false,
                "id": 1824,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21833:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1823,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "21833:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1826,
                "name": "opaqueErr",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21860:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1825,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21860:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1828,
                "name": "borrowRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21887:26:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1827,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21887:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1830,
                "name": "currentBlockNumber",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21923:26:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1829,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21923:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1832,
                "name": "blockDelta",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21959:18:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1831,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "21959:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1834,
                "name": "simpleInterestFactor",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "21987:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                  "typeString": "struct Exponential.Exp"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 1833,
                  "name": "Exp",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5226,
                  "src": "21987:3:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Exp_$5226_storage_ptr",
                    "typeString": "struct Exponential.Exp"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1836,
                "name": "interestAccumulated",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22021:27:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1835,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22021:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1838,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22058:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1837,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22058:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1840,
                "name": "totalReservesNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22091:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1839,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22091:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1842,
                "name": "borrowIndexNew",
                "nodeType": "VariableDeclaration",
                "scope": 1843,
                "src": "22125:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1841,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "22125:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "AccrueInterestLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "21792:362:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2112,
              "nodeType": "Block",
              "src": "22454:4286:2",
              "statements": [
                {
                  "assignments": [
                    1849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1849,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2112,
                      "src": "22464:35:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                        "typeString": "struct CToken.AccrueInterestLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1848,
                        "name": "AccrueInterestLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1843,
                        "src": "22464:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_storage_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1850,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22464:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1851,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22568:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1853,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "opaqueErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1826,
                          "src": "22568:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1854,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22584:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1855,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "borrowRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1828,
                          "src": "22584:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1856,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "22567:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1859,
                            "name": "getCashPrior",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4394,
                            "src": "22656:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22656:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1861,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "22684:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1862,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "22710:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 1857,
                          "name": "interestRateModel",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 739,
                          "src": "22611:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                            "typeString": "contract InterestRateModel"
                          }
                        },
                        "id": 1858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5813,
                        "src": "22611:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) view external returns (uint256,uint256)"
                        }
                      },
                      "id": 1863,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22611:122:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "22567:166:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1865,
                  "nodeType": "ExpressionStatement",
                  "src": "22567:166:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1867,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "22751:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1868,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "borrowRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1828,
                          "src": "22751:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1869,
                          "name": "borrowRateMaxMantissa",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 728,
                          "src": "22778:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22751:48:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f772072617465206973206162737572646c792068696768",
                        "id": 1871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22801:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea",
                          "typeString": "literal_string \"borrow rate is absurdly high\""
                        },
                        "value": "borrow rate is absurdly high"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9ab90068dc5fe9f7def6aab4ae887ed8eff65c4b83c1b9ba6beb99101f1ae8ea",
                          "typeString": "literal_string \"borrow rate is absurdly high\""
                        }
                      ],
                      "id": 1866,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "22743:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22743:89:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1873,
                  "nodeType": "ExpressionStatement",
                  "src": "22743:89:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1874,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "22846:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "opaqueErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1826,
                      "src": "22846:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22864:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22846:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1888,
                  "nodeType": "IfStatement",
                  "src": "22842:270:2",
                  "trueBody": {
                    "id": 1887,
                    "nodeType": "Block",
                    "src": "22867:245:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1879,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "22936:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1880,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INTEREST_RATE_MODEL_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "22936:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1881,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "22989:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1882,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "22989:58:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1883,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1849,
                                "src": "23069:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                  "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                }
                              },
                              "id": 1884,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "opaqueErr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1826,
                              "src": "23069:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1878,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "22904:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22904:197:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1886,
                        "nodeType": "Return",
                        "src": "22881:220:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1889,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "23170:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1891,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "currentBlockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1830,
                      "src": "23170:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 1892,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "23196:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 1893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23196:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23170:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1895,
                  "nodeType": "ExpressionStatement",
                  "src": "23170:42:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1896,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23300:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23300:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1899,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23314:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1900,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "blockDelta",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1832,
                          "src": "23314:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1901,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "23299:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1903,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23341:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1904,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "currentBlockNumber",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1830,
                          "src": "23341:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1905,
                          "name": "accrualBlockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 745,
                          "src": "23366:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1902,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "23333:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23333:52:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "23299:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1908,
                  "nodeType": "ExpressionStatement",
                  "src": "23299:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        },
                        "id": 1914,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1910,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23402:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23402:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1912,
                            "name": "MathError",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "23418:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                              "typeString": "type(enum CarefulMath.MathError)"
                            }
                          },
                          "id": 1913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23418:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        "src": "23402:34:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1909,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11474,
                      "src": "23395:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23395:42:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1916,
                  "nodeType": "ExpressionStatement",
                  "src": "23395:42:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1917,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23983:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1919,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "23983:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1920,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "23997:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1921,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "23997:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        }
                      ],
                      "id": 1922,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "23982:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_$",
                        "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1925,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1849,
                                "src": "24064:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                  "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                }
                              },
                              "id": 1926,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "borrowRateMantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1828,
                              "src": "24064:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1924,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "24049:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 1927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "24049:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1928,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24103:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1929,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "blockDelta",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1832,
                          "src": "24103:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1923,
                        "name": "mulScalar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5386,
                        "src": "24026:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,struct Exponential.Exp memory)"
                        }
                      },
                      "id": 1930,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24026:102:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_struct$_Exp_$5226_memory_ptr_$",
                        "typeString": "tuple(enum CarefulMath.MathError,struct Exponential.Exp memory)"
                      }
                    },
                    "src": "23982:146:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1932,
                  "nodeType": "ExpressionStatement",
                  "src": "23982:146:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1933,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24142:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1934,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24142:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1935,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24158:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1936,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24158:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24142:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1950,
                  "nodeType": "IfStatement",
                  "src": "24138:288:2",
                  "trueBody": {
                    "id": 1949,
                    "nodeType": "Block",
                    "src": "24178:248:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1939,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "24247:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24247:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1941,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "24285:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24285:69:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1944,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "24384:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 1945,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "24384:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 1943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24376:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24376:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1938,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "24215:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24215:200:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1948,
                        "nodeType": "Return",
                        "src": "24192:223:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1951,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24437:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1953,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "24437:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1954,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24451:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1955,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "24451:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1956,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "24436:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1958,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24497:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1959,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "24497:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1960,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "24524:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1957,
                        "name": "mulScalarTruncate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5424,
                        "src": "24479:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24479:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "24436:101:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1963,
                  "nodeType": "ExpressionStatement",
                  "src": "24436:101:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1964,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24551:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1965,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24551:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1966,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24567:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24567:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24551:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1981,
                  "nodeType": "IfStatement",
                  "src": "24547:286:2",
                  "trueBody": {
                    "id": 1980,
                    "nodeType": "Block",
                    "src": "24587:246:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1970,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "24656:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 1971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24656:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1972,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "24694:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 1973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "24694:67:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1975,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "24791:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 1976,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "24791:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 1974,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "24783:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 1977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24783:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1969,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "24624:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 1978,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24624:198:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 1979,
                        "nodeType": "Return",
                        "src": "24601:221:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1982,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24844:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1984,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "24844:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1985,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24858:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1986,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1838,
                          "src": "24858:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1987,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "24843:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1989,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "24890:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 1990,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "24890:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1991,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "24916:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1988,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "24882:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 1992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24882:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "24843:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1994,
                  "nodeType": "ExpressionStatement",
                  "src": "24843:86:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1995,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "24943:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 1996,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "24943:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1997,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "24959:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 1998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24959:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "24943:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2012,
                  "nodeType": "IfStatement",
                  "src": "24939:283:2",
                  "trueBody": {
                    "id": 2011,
                    "nodeType": "Block",
                    "src": "24979:243:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2001,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "25048:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2002,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25048:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2003,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "25086:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25086:64:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2006,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "25180:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2007,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "25180:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25172:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25172:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2000,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25016:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25016:195:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2010,
                        "nodeType": "Return",
                        "src": "24993:218:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2013,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25233:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2015,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "25233:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2016,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25247:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2017,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalReservesNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1840,
                          "src": "25247:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2018,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "25232:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2021,
                              "name": "reserveFactorMantissa",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 743,
                              "src": "25325:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2020,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "25310:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 2022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "25310:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2023,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25362:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2024,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "interestAccumulated",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1836,
                          "src": "25362:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2025,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "25400:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2019,
                        "name": "mulScalarTruncateAddUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5464,
                        "src": "25272:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25272:151:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "25232:191:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2028,
                  "nodeType": "ExpressionStatement",
                  "src": "25232:191:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2029,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "25437:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "25437:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2031,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "25453:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25453:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "25437:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2046,
                  "nodeType": "IfStatement",
                  "src": "25433:284:2",
                  "trueBody": {
                    "id": 2045,
                    "nodeType": "Block",
                    "src": "25473:244:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2035,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "25542:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25542:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2037,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "25580:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2038,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "25580:65:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2040,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "25675:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2041,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "25675:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2039,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25667:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25667:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2034,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25510:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25510:196:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2044,
                        "nodeType": "Return",
                        "src": "25487:219:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2047,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25728:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2049,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1824,
                          "src": "25728:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25742:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2051,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "borrowIndexNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1842,
                          "src": "25742:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2052,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "25727:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2054,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1849,
                            "src": "25803:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                              "typeString": "struct CToken.AccrueInterestLocalVars memory"
                            }
                          },
                          "id": 2055,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "simpleInterestFactor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1834,
                          "src": "25803:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2056,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "25842:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2057,
                          "name": "borrowIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 747,
                          "src": "25867:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2053,
                        "name": "mulScalarTruncateAddUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5464,
                        "src": "25765:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (struct Exponential.Exp memory,uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2058,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25765:123:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "25727:161:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2060,
                  "nodeType": "ExpressionStatement",
                  "src": "25727:161:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2061,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "25902:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2062,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1824,
                      "src": "25902:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2063,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "25918:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2064,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "25918:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "25902:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2078,
                  "nodeType": "IfStatement",
                  "src": "25898:282:2",
                  "trueBody": {
                    "id": 2077,
                    "nodeType": "Block",
                    "src": "25938:242:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2067,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "26007:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2068,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "26007:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2069,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "26045:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "26045:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2072,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1849,
                                    "src": "26138:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                                      "typeString": "struct CToken.AccrueInterestLocalVars memory"
                                    }
                                  },
                                  "id": 2073,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1824,
                                  "src": "26138:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2071,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "26130:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26130:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2066,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "25975:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25975:194:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1847,
                        "id": 2076,
                        "nodeType": "Return",
                        "src": "25952:217:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2079,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "26376:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2080,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26397:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentBlockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1830,
                      "src": "26397:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26376:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2083,
                  "nodeType": "ExpressionStatement",
                  "src": "26376:44:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2084,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "26430:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2085,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26444:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2086,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowIndexNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1842,
                      "src": "26444:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26430:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2088,
                  "nodeType": "ExpressionStatement",
                  "src": "26430:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2089,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "26473:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2090,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26488:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2091,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1838,
                      "src": "26488:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26473:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2093,
                  "nodeType": "ExpressionStatement",
                  "src": "26473:35:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2094,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "26518:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2095,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1849,
                        "src": "26534:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                          "typeString": "struct CToken.AccrueInterestLocalVars memory"
                        }
                      },
                      "id": 2096,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalReservesNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1840,
                      "src": "26534:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26518:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2098,
                  "nodeType": "ExpressionStatement",
                  "src": "26518:37:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2100,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1849,
                          "src": "26632:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                            "typeString": "struct CToken.AccrueInterestLocalVars memory"
                          }
                        },
                        "id": 2101,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "interestAccumulated",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1836,
                        "src": "26632:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2102,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1849,
                          "src": "26658:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccrueInterestLocalVars_$1843_memory_ptr",
                            "typeString": "struct CToken.AccrueInterestLocalVars memory"
                          }
                        },
                        "id": 2103,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "borrowIndexNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1842,
                        "src": "26658:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2104,
                        "name": "totalBorrows",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 749,
                        "src": "26679:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2099,
                      "name": "AccrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 780,
                      "src": "26617:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 2105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26617:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2106,
                  "nodeType": "EmitStatement",
                  "src": "26612:80:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2108,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "26718:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2109,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "26718:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "26710:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26710:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1847,
                  "id": 2111,
                  "nodeType": "Return",
                  "src": "26703:30:2"
                }
              ]
            },
            "documentation": "@notice Applies accrued interest to total borrows and reserves.\n@dev This calculates interest accrued from the last checkpointed block\n     up to the current block and writes new checkpoint to storage.",
            "id": 2113,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "accrueInterest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1844,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22426:2:2"
            },
            "returnParameters": {
              "id": 1847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2113,
                  "src": "22445:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1845,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22445:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22444:9:2"
            },
            "scope": 4422,
            "src": "22403:4337:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2149,
              "nodeType": "Block",
              "src": "27172:458:2",
              "statements": [
                {
                  "assignments": [
                    2123
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2123,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2149,
                      "src": "27182:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2122,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27182:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2124,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "27198:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27198:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27182:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2127,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2123,
                      "src": "27228:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2129,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "27245:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "27245:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27237:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27237:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27228:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2142,
                  "nodeType": "IfStatement",
                  "src": "27224:247:2",
                  "trueBody": {
                    "id": 2141,
                    "nodeType": "Block",
                    "src": "27262:209:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2135,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2123,
                                  "src": "27412:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2134,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "27406:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27406:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2137,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "27420:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "27420:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2133,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "27401:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27401:59:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2121,
                        "id": 2140,
                        "nodeType": "Return",
                        "src": "27394:66:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2144,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "27600:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "27600:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2146,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2115,
                        "src": "27612:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2143,
                      "name": "mintFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2429,
                      "src": "27590:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27590:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2121,
                  "id": 2148,
                  "nodeType": "Return",
                  "src": "27583:40:2"
                }
              ]
            },
            "documentation": "@notice Sender supplies assets into the market and receives cTokens in exchange\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2150,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2118,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2117,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "27141:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "27141:12:2"
              }
            ],
            "name": "mintInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2115,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2150,
                  "src": "27112:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27112:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27111:20:2"
            },
            "returnParameters": {
              "id": 2121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2120,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2150,
                  "src": "27163:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27163:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27162:9:2"
            },
            "scope": 4422,
            "src": "27090:540:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.MintLocalVars",
            "id": 2163,
            "members": [
              {
                "constant": false,
                "id": 2152,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27667:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2151,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "27667:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2154,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27686:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2153,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "27686:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2156,
                "name": "exchangeRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27713:28:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2155,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27713:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2158,
                "name": "mintTokens",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27751:18:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2157,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27751:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2160,
                "name": "totalSupplyNew",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27779:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2159,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27779:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2162,
                "name": "accountTokensNew",
                "nodeType": "VariableDeclaration",
                "scope": 2163,
                "src": "27811:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2161,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "27811:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "MintLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "27636:206:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2428,
              "nodeType": "Block",
              "src": "28344:3726:2",
              "statements": [
                {
                  "assignments": [
                    2173
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2173,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2428,
                      "src": "28393:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2172,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28393:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2182,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2177,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "28443:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2176,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "28435:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28435:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2179,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "28450:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2180,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "28458:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2174,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "28411:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4641,
                      "src": "28411:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28411:58:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28393:76:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2183,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2173,
                      "src": "28483:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28494:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "28483:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2195,
                  "nodeType": "IfStatement",
                  "src": "28479:138:2",
                  "trueBody": {
                    "id": 2194,
                    "nodeType": "Block",
                    "src": "28497:120:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2187,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "28529:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2188,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28529:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2189,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "28558:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28558:38:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2191,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2173,
                              "src": "28598:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2186,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "28518:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28518:88:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2193,
                        "nodeType": "Return",
                        "src": "28511:95:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2196,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "28702:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2197,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "28724:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28724:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28702:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2208,
                  "nodeType": "IfStatement",
                  "src": "28698:138:2",
                  "trueBody": {
                    "id": 2207,
                    "nodeType": "Block",
                    "src": "28742:94:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2201,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "28768:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28768:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2203,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "28792:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2204,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "28792:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2200,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "28763:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28763:62:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2206,
                        "nodeType": "Return",
                        "src": "28756:69:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2210
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2210,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2428,
                      "src": "28846:25:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                        "typeString": "struct CToken.MintLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2209,
                        "name": "MintLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2163,
                        "src": "28846:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_storage_ptr",
                          "typeString": "struct CToken.MintLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2211,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28846:25:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2212,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "28926:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2214,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "28926:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2216,
                          "name": "minter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "28953:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2217,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "28961:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2215,
                        "name": "checkTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "28937:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) view returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "28937:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "28926:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2220,
                  "nodeType": "ExpressionStatement",
                  "src": "28926:46:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 2225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2221,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "28986:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2222,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "28986:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2223,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "28998:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "28998:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "28986:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2234,
                  "nodeType": "IfStatement",
                  "src": "28982:121:2",
                  "trueBody": {
                    "id": 2233,
                    "nodeType": "Block",
                    "src": "29014:89:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2227,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "29040:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2228,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2152,
                              "src": "29040:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2229,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29050:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_TRANSFER_IN_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29050:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2226,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "29035:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29035:57:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2232,
                        "nodeType": "Return",
                        "src": "29028:64:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2235,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29282:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2237,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "29282:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2238,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29296:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2239,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "exchangeRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2156,
                          "src": "29296:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2240,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29281:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2241,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "29325:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29325:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "29281:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2244,
                  "nodeType": "ExpressionStatement",
                  "src": "29281:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2245,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "29367:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2246,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "29367:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2247,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "29383:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29383:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "29367:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2262,
                  "nodeType": "IfStatement",
                  "src": "29363:167:2",
                  "trueBody": {
                    "id": 2261,
                    "nodeType": "Block",
                    "src": "29403:127:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2251,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "29435:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29435:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2253,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29453:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_EXCHANGE_RATE_READ_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29453:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2256,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "29505:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2257,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "29505:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2255,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "29497:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "29497:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2250,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "29424:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29424:95:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2260,
                        "nodeType": "Return",
                        "src": "29417:102:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2263,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29541:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2265,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "29541:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2266,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "29555:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2267,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "29555:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2268,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "29540:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2270,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "29610:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2272,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "29649:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2273,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exchangeRateMantissa",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2156,
                              "src": "29649:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2271,
                            "name": "Exp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5226,
                            "src": "29634:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                              "typeString": "type(struct Exponential.Exp storage pointer)"
                            }
                          },
                          "id": 2274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [
                            "mantissa"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "29634:42:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_struct$_Exp_$5226_memory",
                            "typeString": "struct Exponential.Exp memory"
                          }
                        ],
                        "id": 2269,
                        "name": "divScalarByExpTruncate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5582,
                        "src": "29574:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29574:112:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "29540:146:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2277,
                  "nodeType": "ExpressionStatement",
                  "src": "29540:146:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2278,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "29700:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2279,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "29700:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2280,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "29716:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "29716:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "29700:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2295,
                  "nodeType": "IfStatement",
                  "src": "29696:169:2",
                  "trueBody": {
                    "id": 2294,
                    "nodeType": "Block",
                    "src": "29736:129:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2284,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "29768:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29768:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2286,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "29786:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2287,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_EXCHANGE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "29786:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2289,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "29840:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2290,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "29840:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "29832:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2291,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "29832:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2283,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "29757:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29757:97:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2293,
                        "nodeType": "Return",
                        "src": "29750:104:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2296,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30124:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "30124:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2299,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30138:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2300,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalSupplyNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2160,
                          "src": "30138:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2301,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "30123:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2303,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 753,
                          "src": "30169:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2304,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30182:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2305,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "30182:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2302,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "30161:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2306,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30161:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "30123:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2308,
                  "nodeType": "ExpressionStatement",
                  "src": "30123:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2309,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "30212:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2310,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "30212:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2311,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "30228:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "30228:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "30212:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2326,
                  "nodeType": "IfStatement",
                  "src": "30208:271:2",
                  "trueBody": {
                    "id": 2325,
                    "nodeType": "Block",
                    "src": "30248:231:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2315,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "30317:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30317:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2317,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "30355:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30355:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2320,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "30437:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2321,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "30437:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "30429:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30429:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2314,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "30285:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30285:183:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2324,
                        "nodeType": "Return",
                        "src": "30262:206:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2327,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30490:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2329,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2154,
                          "src": "30490:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2330,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30504:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2331,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountTokensNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2162,
                          "src": "30504:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2332,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "30489:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2334,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "30537:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2336,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2335,
                            "name": "minter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2165,
                            "src": "30551:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "30537:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2337,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2210,
                            "src": "30560:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                              "typeString": "struct CToken.MintLocalVars memory"
                            }
                          },
                          "id": 2338,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mintTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2158,
                          "src": "30560:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2333,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "30529:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30529:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "30489:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2341,
                  "nodeType": "ExpressionStatement",
                  "src": "30489:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2342,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "30590:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2343,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2154,
                      "src": "30590:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2344,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "30606:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2345,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "30606:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "30590:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2359,
                  "nodeType": "IfStatement",
                  "src": "30586:274:2",
                  "trueBody": {
                    "id": 2358,
                    "nodeType": "Block",
                    "src": "30626:234:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2348,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "30695:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2349,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30695:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2350,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "30733:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "30733:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2353,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2210,
                                    "src": "30818:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                      "typeString": "struct CToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 2354,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2154,
                                  "src": "30818:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "30810:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30810:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2347,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "30663:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30663:186:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2357,
                        "nodeType": "Return",
                        "src": "30640:209:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2360,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31390:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2362,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "31390:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2364,
                          "name": "minter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2165,
                          "src": "31414:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2365,
                          "name": "mintAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2167,
                          "src": "31422:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2363,
                        "name": "doTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4412,
                        "src": "31401:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31401:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "31390:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2368,
                  "nodeType": "ExpressionStatement",
                  "src": "31390:43:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 2373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2369,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31447:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2152,
                      "src": "31447:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2371,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "31459:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "31459:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "31447:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2382,
                  "nodeType": "IfStatement",
                  "src": "31443:115:2",
                  "trueBody": {
                    "id": 2381,
                    "nodeType": "Block",
                    "src": "31475:83:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2375,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2210,
                                "src": "31501:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                                  "typeString": "struct CToken.MintLocalVars memory"
                                }
                              },
                              "id": 2376,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2152,
                              "src": "31501:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2377,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "31511:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MINT_TRANSFER_IN_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "31511:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2374,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "31496:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31496:51:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2171,
                        "id": 2380,
                        "nodeType": "Return",
                        "src": "31489:58:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2383,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "31633:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2384,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31647:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2385,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2160,
                      "src": "31647:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31633:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2387,
                  "nodeType": "ExpressionStatement",
                  "src": "31633:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2388,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "31676:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2390,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2389,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31690:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "31676:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2391,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2210,
                        "src": "31700:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                          "typeString": "struct CToken.MintLocalVars memory"
                        }
                      },
                      "id": 2392,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountTokensNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2162,
                      "src": "31700:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31676:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2394,
                  "nodeType": "ExpressionStatement",
                  "src": "31676:45:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2396,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31799:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2397,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "31807:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2398,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "31819:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2399,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "31819:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2395,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 788,
                      "src": "31794:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 2400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31794:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2401,
                  "nodeType": "EmitStatement",
                  "src": "31789:46:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2404,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "31867:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31859:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31859:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2406,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31874:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2407,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "31882:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2408,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "31882:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2402,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "31850:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31850:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2410,
                  "nodeType": "EmitStatement",
                  "src": "31845:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2415,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "31979:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31971:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31971:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "minter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2165,
                        "src": "31986:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2418,
                        "name": "mintAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2167,
                        "src": "31994:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2419,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2210,
                          "src": "32006:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$2163_memory_ptr",
                            "typeString": "struct CToken.MintLocalVars memory"
                          }
                        },
                        "id": 2420,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mintTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2158,
                        "src": "32006:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2411,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "31948:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4652,
                      "src": "31948:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 2421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31948:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2422,
                  "nodeType": "ExpressionStatement",
                  "src": "31948:74:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2424,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "32048:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "32048:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "32040:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32040:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2171,
                  "id": 2427,
                  "nodeType": "Return",
                  "src": "32033:30:2"
                }
              ]
            },
            "documentation": "@notice User supplies assets into the market and receives cTokens in exchange\n@dev Assumes interest has already been accrued up to the current block\n@param minter The address of the account which is supplying the assets\n@param mintAmount The amount of the underlying asset to supply\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2429,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2168,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2165,
                  "name": "minter",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28281:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28281:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2167,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28297:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28297:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28280:36:2"
            },
            "returnParameters": {
              "id": 2171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2170,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "28335:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2169,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28335:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28334:9:2"
            },
            "scope": 4422,
            "src": "28262:3808:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2466,
              "nodeType": "Block",
              "src": "32499:445:2",
              "statements": [
                {
                  "assignments": [
                    2439
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2439,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2466,
                      "src": "32509:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2438,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32509:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2442,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2440,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "32525:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32525:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32509:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2443,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2439,
                      "src": "32555:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2445,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "32572:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "32572:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "32564:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2447,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32564:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32555:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2458,
                  "nodeType": "IfStatement",
                  "src": "32551:249:2",
                  "trueBody": {
                    "id": 2457,
                    "nodeType": "Block",
                    "src": "32589:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2451,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2439,
                                  "src": "32739:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2450,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "32733:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "32733:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2453,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "32747:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2454,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "32747:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2449,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "32728:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32728:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2437,
                        "id": 2456,
                        "nodeType": "Return",
                        "src": "32721:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2460,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "32909:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "32909:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2462,
                        "name": "redeemTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2431,
                        "src": "32921:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32935:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 2459,
                      "name": "redeemFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2840,
                      "src": "32897:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256,uint256) returns (uint256)"
                      }
                    },
                    "id": 2464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32897:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2437,
                  "id": 2465,
                  "nodeType": "Return",
                  "src": "32890:47:2"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for the underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemTokens The number of cTokens to redeem into underlying\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2467,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2434,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2433,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "32468:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "32468:12:2"
              }
            ],
            "name": "redeemInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2431,
                  "name": "redeemTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 2467,
                  "src": "32437:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32437:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32436:22:2"
            },
            "returnParameters": {
              "id": 2437,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2436,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2467,
                  "src": "32490:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32490:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "32489:9:2"
            },
            "scope": 4422,
            "src": "32413:531:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2504,
              "nodeType": "Block",
              "src": "33388:445:2",
              "statements": [
                {
                  "assignments": [
                    2477
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2477,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2504,
                      "src": "33398:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2476,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33398:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2480,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2478,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "33414:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33414:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33398:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2481,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2477,
                      "src": "33444:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2483,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "33461:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "33461:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "33453:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33453:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33444:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2496,
                  "nodeType": "IfStatement",
                  "src": "33440:249:2",
                  "trueBody": {
                    "id": 2495,
                    "nodeType": "Block",
                    "src": "33478:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2489,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2477,
                                  "src": "33628:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2488,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "33622:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "33622:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2491,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "33636:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "33636:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2487,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "33617:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33617:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2475,
                        "id": 2494,
                        "nodeType": "Return",
                        "src": "33610:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2498,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "33798:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "33798:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "33810:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2501,
                        "name": "redeemAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2469,
                        "src": "33813:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2497,
                      "name": "redeemFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2840,
                      "src": "33786:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256,uint256) returns (uint256)"
                      }
                    },
                    "id": 2502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33786:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2475,
                  "id": 2503,
                  "nodeType": "Return",
                  "src": "33779:47:2"
                }
              ]
            },
            "documentation": "@notice Sender redeems cTokens in exchange for a specified amount of underlying asset\n@dev Accrues interest whether or not the operation succeeds, unless reverted\n@param redeemAmount The amount of underlying to redeem\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2505,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2472,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2471,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "33357:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "33357:12:2"
              }
            ],
            "name": "redeemUnderlyingInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2469,
                  "name": "redeemAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2505,
                  "src": "33326:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2468,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33326:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33325:22:2"
            },
            "returnParameters": {
              "id": 2475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2474,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2505,
                  "src": "33379:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33379:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "33378:9:2"
            },
            "scope": 4422,
            "src": "33292:541:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.RedeemLocalVars",
            "id": 2520,
            "members": [
              {
                "constant": false,
                "id": 2507,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33872:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2506,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "33872:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2509,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33891:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2508,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "33891:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2511,
                "name": "exchangeRateMantissa",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33918:28:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2510,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33918:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2513,
                "name": "redeemTokens",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33956:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2512,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33956:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2515,
                "name": "redeemAmount",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "33986:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2514,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "33986:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2517,
                "name": "totalSupplyNew",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "34016:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2516,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "34016:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2519,
                "name": "accountTokensNew",
                "nodeType": "VariableDeclaration",
                "scope": 2520,
                "src": "34048:24:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2518,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "34048:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RedeemLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "33839:240:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 2839,
              "nodeType": "Block",
              "src": "34833:5052:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2532,
                            "name": "redeemTokensIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2524,
                            "src": "34851:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34869:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "34851:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2535,
                            "name": "redeemAmountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2526,
                            "src": "34874:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34892:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "34874:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "34851:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416d6f756e74496e206d757374206265207a65726f",
                        "id": 2539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "34895:54:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2",
                          "typeString": "literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""
                        },
                        "value": "one of redeemTokensIn or redeemAmountIn must be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e7cef2e7b515a83b650bc43dbe7230ede3601779d8be25fbf237261dccd3d9f2",
                          "typeString": "literal_string \"one of redeemTokensIn or redeemAmountIn must be zero\""
                        }
                      ],
                      "id": 2531,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "34843:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "34843:107:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2541,
                  "nodeType": "ExpressionStatement",
                  "src": "34843:107:2"
                },
                {
                  "assignments": [
                    2543
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2543,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "34961:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                        "typeString": "struct CToken.RedeemLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2542,
                        "name": "RedeemLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2520,
                        "src": "34961:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_storage_ptr",
                          "typeString": "struct CToken.RedeemLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2544,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "34961:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2545,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "35059:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2547,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "35059:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2548,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "35073:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2549,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "exchangeRateMantissa",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2511,
                          "src": "35073:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2550,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "35058:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2551,
                        "name": "exchangeRateStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "35102:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function () view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35102:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "35058:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2554,
                  "nodeType": "ExpressionStatement",
                  "src": "35058:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2555,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "35144:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "35144:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2557,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "35160:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "35160:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "35144:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2572,
                  "nodeType": "IfStatement",
                  "src": "35140:169:2",
                  "trueBody": {
                    "id": 2571,
                    "nodeType": "Block",
                    "src": "35180:129:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2561,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "35212:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "35212:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2563,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "35230:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_EXCHANGE_RATE_READ_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "35230:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2566,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "35284:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2567,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "35284:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "35276:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2568,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "35276:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2560,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "35201:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "35201:97:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2570,
                        "nodeType": "Return",
                        "src": "35194:104:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2573,
                      "name": "redeemTokensIn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2524,
                      "src": "35360:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "35377:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "35360:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2655,
                    "nodeType": "Block",
                    "src": "36168:779:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2616,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "36411:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2618,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "mathErr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2509,
                                "src": "36411:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2619,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "36425:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2620,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "redeemTokens",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2513,
                                "src": "36425:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2621,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "36410:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2623,
                                "name": "redeemAmountIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2526,
                                "src": "36486:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2625,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2543,
                                      "src": "36533:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                        "typeString": "struct CToken.RedeemLocalVars memory"
                                      }
                                    },
                                    "id": 2626,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "exchangeRateMantissa",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2511,
                                    "src": "36533:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2624,
                                  "name": "Exp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5226,
                                  "src": "36518:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                    "typeString": "type(struct Exponential.Exp storage pointer)"
                                  }
                                },
                                "id": 2627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "mantissa"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "36518:42:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              ],
                              "id": 2622,
                              "name": "divScalarByExpTruncate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5582,
                              "src": "36446:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_struct$_Exp_$5226_memory_ptr_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (uint256,struct Exponential.Exp memory) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 2628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "36446:128:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "36410:164:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2630,
                        "nodeType": "ExpressionStatement",
                        "src": "36410:164:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 2635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2631,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "36592:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2632,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mathErr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2509,
                            "src": "36592:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2633,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "36608:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 2634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "36608:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "36592:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2648,
                        "nodeType": "IfStatement",
                        "src": "36588:300:2",
                        "trueBody": {
                          "id": 2647,
                          "nodeType": "Block",
                          "src": "36628:260:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2637,
                                      "name": "Error",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5069,
                                      "src": "36709:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                        "typeString": "type(enum TokenErrorReporter.Error)"
                                      }
                                    },
                                    "id": 2638,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MATH_ERROR",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36709:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2639,
                                      "name": "FailureInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5148,
                                      "src": "36751:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                        "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                      }
                                    },
                                    "id": 2640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36751:53:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2642,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2543,
                                          "src": "36838:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                            "typeString": "struct CToken.RedeemLocalVars memory"
                                          }
                                        },
                                        "id": 2643,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mathErr",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2509,
                                        "src": "36838:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      ],
                                      "id": 2641,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "36830:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 2644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "36830:21:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2636,
                                  "name": "failOpaque",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5206,
                                  "src": "36673:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                                  }
                                },
                                "id": 2645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "36673:200:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2530,
                              "id": 2646,
                              "nodeType": "Return",
                              "src": "36646:227:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2649,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "36902:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2651,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "redeemAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2515,
                            "src": "36902:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2652,
                            "name": "redeemAmountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2526,
                            "src": "36922:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "36902:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2654,
                        "nodeType": "ExpressionStatement",
                        "src": "36902:34:2"
                      }
                    ]
                  },
                  "id": 2656,
                  "nodeType": "IfStatement",
                  "src": "35356:1591:2",
                  "trueBody": {
                    "id": 2615,
                    "nodeType": "Block",
                    "src": "35380:782:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2576,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "35630:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2578,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "redeemTokens",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2513,
                            "src": "35630:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2579,
                            "name": "redeemTokensIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2524,
                            "src": "35650:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "35630:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2581,
                        "nodeType": "ExpressionStatement",
                        "src": "35630:34:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2582,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "35680:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2584,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "mathErr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2509,
                                "src": "35680:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_MathError_$4429",
                                  "typeString": "enum CarefulMath.MathError"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2585,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2543,
                                  "src": "35694:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                    "typeString": "struct CToken.RedeemLocalVars memory"
                                  }
                                },
                                "id": 2586,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "redeemAmount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2515,
                                "src": "35694:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 2587,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "35679:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2590,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2543,
                                      "src": "35765:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                        "typeString": "struct CToken.RedeemLocalVars memory"
                                      }
                                    },
                                    "id": 2591,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "exchangeRateMantissa",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2511,
                                    "src": "35765:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2589,
                                  "name": "Exp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5226,
                                  "src": "35750:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Exp_$5226_storage_ptr_$",
                                    "typeString": "type(struct Exponential.Exp storage pointer)"
                                  }
                                },
                                "id": 2592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "structConstructorCall",
                                "lValueRequested": false,
                                "names": [
                                  "mantissa"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "35750:42:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 2593,
                                "name": "redeemTokensIn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2524,
                                "src": "35810:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Exp_$5226_memory",
                                  "typeString": "struct Exponential.Exp memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2588,
                              "name": "mulScalarTruncate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5424,
                              "src": "35715:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_struct$_Exp_$5226_memory_ptr_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                                "typeString": "function (struct Exponential.Exp memory,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                              }
                            },
                            "id": 2594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35715:123:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                              "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                            }
                          },
                          "src": "35679:159:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2596,
                        "nodeType": "ExpressionStatement",
                        "src": "35679:159:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          },
                          "id": 2601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2597,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2543,
                              "src": "35856:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                "typeString": "struct CToken.RedeemLocalVars memory"
                              }
                            },
                            "id": 2598,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mathErr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2509,
                            "src": "35856:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2599,
                              "name": "MathError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4429,
                              "src": "35872:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                                "typeString": "type(enum CarefulMath.MathError)"
                              }
                            },
                            "id": 2600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "NO_ERROR",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "35872:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_MathError_$4429",
                              "typeString": "enum CarefulMath.MathError"
                            }
                          },
                          "src": "35856:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2614,
                        "nodeType": "IfStatement",
                        "src": "35852:300:2",
                        "trueBody": {
                          "id": 2613,
                          "nodeType": "Block",
                          "src": "35892:260:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2603,
                                      "name": "Error",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5069,
                                      "src": "35973:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                        "typeString": "type(enum TokenErrorReporter.Error)"
                                      }
                                    },
                                    "id": 2604,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MATH_ERROR",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "35973:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2605,
                                      "name": "FailureInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5148,
                                      "src": "36015:11:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                        "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                      }
                                    },
                                    "id": 2606,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "36015:53:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2608,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2543,
                                          "src": "36102:4:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                            "typeString": "struct CToken.RedeemLocalVars memory"
                                          }
                                        },
                                        "id": 2609,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mathErr",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2509,
                                        "src": "36102:12:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_enum$_MathError_$4429",
                                          "typeString": "enum CarefulMath.MathError"
                                        }
                                      ],
                                      "id": 2607,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "36094:7:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 2610,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "36094:21:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_Error_$5069",
                                      "typeString": "enum TokenErrorReporter.Error"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                      "typeString": "enum TokenErrorReporter.FailureInfo"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2602,
                                  "name": "failOpaque",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5206,
                                  "src": "35937:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                                  }
                                },
                                "id": 2611,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "35937:200:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2530,
                              "id": 2612,
                              "nodeType": "Return",
                              "src": "35910:227:2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2658
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2658,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 2839,
                      "src": "36998:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2657,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "36998:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2668,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2662,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "37050:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "37042:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "37042:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2664,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "37057:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2665,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "37067:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2666,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "37067:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2659,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "37016:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4663,
                      "src": "37016:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37016:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36998:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2669,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2658,
                      "src": "37099:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "37110:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "37099:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2681,
                  "nodeType": "IfStatement",
                  "src": "37095:140:2",
                  "trueBody": {
                    "id": 2680,
                    "nodeType": "Block",
                    "src": "37113:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2673,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37145:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2674,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37145:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2675,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37174:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37174:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2677,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2658,
                              "src": "37216:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2672,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "37134:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37134:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2679,
                        "nodeType": "Return",
                        "src": "37127:97:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2682,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "37320:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2683,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "37342:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37342:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "37320:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2694,
                  "nodeType": "IfStatement",
                  "src": "37316:140:2",
                  "trueBody": {
                    "id": 2693,
                    "nodeType": "Block",
                    "src": "37360:96:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2687,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37386:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37386:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2689,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37410:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37410:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2686,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "37381:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37381:64:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2692,
                        "nodeType": "Return",
                        "src": "37374:71:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2695,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37707:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2697,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "37707:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2698,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37721:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2699,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalSupplyNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2517,
                          "src": "37721:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2700,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "37706:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2702,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 753,
                          "src": "37752:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2703,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "37765:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2704,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2513,
                          "src": "37765:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2701,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "37744:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2705,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37744:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "37706:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2707,
                  "nodeType": "ExpressionStatement",
                  "src": "37706:77:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2708,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "37797:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2709,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "37797:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2710,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "37813:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2711,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "37813:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "37797:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2725,
                  "nodeType": "IfStatement",
                  "src": "37793:273:2",
                  "trueBody": {
                    "id": 2724,
                    "nodeType": "Block",
                    "src": "37833:233:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2714,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "37902:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37902:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2716,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "37940:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2717,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "37940:54:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2719,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "38024:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2720,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "38024:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38016:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38016:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2713,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "37870:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37870:185:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2723,
                        "nodeType": "Return",
                        "src": "37847:208:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2726,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38077:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2728,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2509,
                          "src": "38077:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2729,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38091:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2730,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountTokensNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2519,
                          "src": "38091:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2731,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "38076:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2733,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "38124:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2735,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2734,
                            "name": "redeemer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2522,
                            "src": "38138:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "38124:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2736,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "38149:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemTokens",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2513,
                          "src": "38149:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2732,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "38116:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2738,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38116:51:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "38076:91:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2740,
                  "nodeType": "ExpressionStatement",
                  "src": "38076:91:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2741,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "38181:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2509,
                      "src": "38181:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "38197:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "38197:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "38181:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2758,
                  "nodeType": "IfStatement",
                  "src": "38177:276:2",
                  "trueBody": {
                    "id": 2757,
                    "nodeType": "Block",
                    "src": "38217:236:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2747,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "38286:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2748,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38286:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2749,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "38324:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38324:57:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2752,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2543,
                                    "src": "38411:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                                      "typeString": "struct CToken.RedeemLocalVars memory"
                                    }
                                  },
                                  "id": 2753,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "38411:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2751,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38403:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2754,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38403:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2746,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "38254:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38254:188:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2756,
                        "nodeType": "Return",
                        "src": "38231:211:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2759,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "38531:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "38531:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2761,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "38548:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2762,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2515,
                      "src": "38548:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "38531:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2772,
                  "nodeType": "IfStatement",
                  "src": "38527:153:2",
                  "trueBody": {
                    "id": 2771,
                    "nodeType": "Block",
                    "src": "38567:113:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2765,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "38593:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38593:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2767,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "38624:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDEEM_TRANSFER_OUT_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "38624:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2764,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "38588:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38588:81:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2530,
                        "id": 2770,
                        "nodeType": "Return",
                        "src": "38581:88:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2773,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39210:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2775,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2507,
                      "src": "39210:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2777,
                          "name": "redeemer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2522,
                          "src": "39235:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2778,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "39245:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2779,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "redeemAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2515,
                          "src": "39245:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2776,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "39221:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 2780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "39221:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "39210:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 2782,
                  "nodeType": "ExpressionStatement",
                  "src": "39210:53:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 2788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2784,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2543,
                            "src": "39281:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                              "typeString": "struct CToken.RedeemLocalVars memory"
                            }
                          },
                          "id": 2785,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2507,
                          "src": "39281:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2786,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "39293:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "39293:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "39281:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72656465656d207472616e73666572206f7574206661696c6564",
                        "id": 2789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "39309:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c505aa80a420a38d944c055f3a05a2359dd43f08149497562ed32909f93e49be",
                          "typeString": "literal_string \"redeem transfer out failed\""
                        },
                        "value": "redeem transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c505aa80a420a38d944c055f3a05a2359dd43f08149497562ed32909f93e49be",
                          "typeString": "literal_string \"redeem transfer out failed\""
                        }
                      ],
                      "id": 2783,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "39273:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39273:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2791,
                  "nodeType": "ExpressionStatement",
                  "src": "39273:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2792,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 753,
                      "src": "39414:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2793,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39428:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2794,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2517,
                      "src": "39428:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39414:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2796,
                  "nodeType": "ExpressionStatement",
                  "src": "39414:33:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2797,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "39457:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 2799,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2798,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39471:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "39457:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2800,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2543,
                        "src": "39483:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                          "typeString": "struct CToken.RedeemLocalVars memory"
                        }
                      },
                      "id": 2801,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountTokensNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2519,
                      "src": "39483:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39457:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2803,
                  "nodeType": "ExpressionStatement",
                  "src": "39457:47:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2805,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39588:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2807,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "39606:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "39598:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39598:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2809,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39613:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2810,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39613:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2804,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "39579:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 2811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39579:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2812,
                  "nodeType": "EmitStatement",
                  "src": "39574:57:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2814,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39653:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2815,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39663:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2816,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2515,
                        "src": "39663:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2817,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39682:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2818,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39682:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2813,
                      "name": "Redeem",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 796,
                      "src": "39646:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 2819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39646:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2820,
                  "nodeType": "EmitStatement",
                  "src": "39641:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2825,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "39783:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "39775:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "39775:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2827,
                        "name": "redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "39790:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2828,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39800:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2829,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2515,
                        "src": "39800:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2830,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2543,
                          "src": "39819:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RedeemLocalVars_$2520_memory_ptr",
                            "typeString": "struct CToken.RedeemLocalVars memory"
                          }
                        },
                        "id": 2831,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemTokens",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2513,
                        "src": "39819:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2821,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "39750:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4674,
                      "src": "39750:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256) external"
                      }
                    },
                    "id": 2832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39750:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2833,
                  "nodeType": "ExpressionStatement",
                  "src": "39750:87:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2835,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "39863:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 2836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "39863:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 2834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "39855:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 2837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39855:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2530,
                  "id": 2838,
                  "nodeType": "Return",
                  "src": "39848:30:2"
                }
              ]
            },
            "documentation": "@notice User redeems cTokens in exchange for the underlying asset\n@dev Assumes interest has already been accrued up to the current block\n@param redeemer The address of the account which is redeeming the tokens\n@param redeemTokensIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n@param redeemAmountIn The number of cTokens to redeem into underlying (only one of redeemTokensIn or redeemAmountIn may be zero)\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2840,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redeemFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2527,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2522,
                  "name": "redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34712:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34712:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2524,
                  "name": "redeemTokensIn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34738:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2523,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34738:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2526,
                  "name": "redeemAmountIn",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34762:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2525,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34762:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34711:74:2"
            },
            "returnParameters": {
              "id": 2530,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2529,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2840,
                  "src": "34820:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34820:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "34819:9:2"
            },
            "scope": 4422,
            "src": "34691:5194:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2876,
              "nodeType": "Block",
              "src": "40232:442:2",
              "statements": [
                {
                  "assignments": [
                    2850
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2850,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 2876,
                      "src": "40242:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2849,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "40242:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2853,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 2851,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "40258:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 2852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "40258:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40242:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2854,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2850,
                      "src": "40288:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2856,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "40305:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 2857,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "40305:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 2855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "40297:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 2858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "40297:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "40288:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2869,
                  "nodeType": "IfStatement",
                  "src": "40284:249:2",
                  "trueBody": {
                    "id": 2868,
                    "nodeType": "Block",
                    "src": "40322:211:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2862,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2850,
                                  "src": "40472:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2861,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "40466:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40466:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2864,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "40480:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2865,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "40480:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2860,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "40461:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40461:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2848,
                        "id": 2867,
                        "nodeType": "Return",
                        "src": "40454:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2871,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "40642:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "40642:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2873,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2842,
                        "src": "40654:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2870,
                      "name": "borrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3103,
                      "src": "40630:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address payable,uint256) returns (uint256)"
                      }
                    },
                    "id": 2874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "40630:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2848,
                  "id": 2875,
                  "nodeType": "Return",
                  "src": "40623:44:2"
                }
              ]
            },
            "documentation": "@notice Sender borrows assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 2877,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2845,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2844,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "40201:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "40201:12:2"
              }
            ],
            "name": "borrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2842,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 2877,
                  "src": "40170:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2841,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40170:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "40169:22:2"
            },
            "returnParameters": {
              "id": 2848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2847,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2877,
                  "src": "40223:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "40223:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "40222:9:2"
            },
            "scope": 4422,
            "src": "40146:528:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.BorrowLocalVars",
            "id": 2888,
            "members": [
              {
                "constant": false,
                "id": 2879,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40713:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2878,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "40713:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2881,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40732:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 2880,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "40732:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2883,
                "name": "accountBorrows",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40759:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2882,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40759:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2885,
                "name": "accountBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40791:25:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2884,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40791:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2887,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 2888,
                "src": "40826:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2886,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "40826:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BorrowLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "40680:176:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 3102,
              "nodeType": "Block",
              "src": "41211:3310:2",
              "statements": [
                {
                  "assignments": [
                    2898
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2898,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3102,
                      "src": "41262:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2897,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "41262:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2907,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2902,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "41314:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 2901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "41306:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "41306:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2904,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "41321:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2905,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "41331:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2899,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "41280:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 2900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4685,
                      "src": "41280:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 2906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "41280:64:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "41262:82:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2908,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2898,
                      "src": "41358:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "41369:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "41358:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2920,
                  "nodeType": "IfStatement",
                  "src": "41354:140:2",
                  "trueBody": {
                    "id": 2919,
                    "nodeType": "Block",
                    "src": "41372:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2912,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41404:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41404:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2914,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41433:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2915,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41433:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2916,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2898,
                              "src": "41475:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2911,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "41393:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41393:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2918,
                        "nodeType": "Return",
                        "src": "41386:97:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2921,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "41579:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2922,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "41601:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "41601:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41579:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2933,
                  "nodeType": "IfStatement",
                  "src": "41575:140:2",
                  "trueBody": {
                    "id": 2932,
                    "nodeType": "Block",
                    "src": "41619:96:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2926,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41645:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41645:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2928,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41669:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41669:34:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2925,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "41640:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41640:64:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2931,
                        "nodeType": "Return",
                        "src": "41633:71:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 2934,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "41804:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 2935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "41804:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2936,
                      "name": "borrowAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2892,
                      "src": "41821:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41804:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2946,
                  "nodeType": "IfStatement",
                  "src": "41800:141:2",
                  "trueBody": {
                    "id": 2945,
                    "nodeType": "Block",
                    "src": "41835:106:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2939,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "41861:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2940,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41861:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2941,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "41892:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_CASH_NOT_AVAILABLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "41892:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 2938,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "41856:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 2943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41856:74:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2944,
                        "nodeType": "Return",
                        "src": "41849:81:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2948,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 3102,
                      "src": "41951:27:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                        "typeString": "struct CToken.BorrowLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2947,
                        "name": "BorrowLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2888,
                        "src": "41951:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_storage_ptr",
                          "typeString": "struct CToken.BorrowLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2949,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "41951:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2950,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42222:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2952,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42222:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2953,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42236:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2954,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2883,
                          "src": "42236:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2955,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42221:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2957,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "42287:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "id": 2956,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "42259:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "42259:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42221:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2960,
                  "nodeType": "ExpressionStatement",
                  "src": "42221:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2961,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "42310:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 2962,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "42310:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2963,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "42326:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "42326:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "42310:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2978,
                  "nodeType": "IfStatement",
                  "src": "42306:276:2",
                  "trueBody": {
                    "id": 2977,
                    "nodeType": "Block",
                    "src": "42346:236:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2967,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "42415:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42415:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2969,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "42453:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 2970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42453:57:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2972,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "42540:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 2973,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "42540:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 2971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42532:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 2974,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42532:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2966,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "42383:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 2975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42383:188:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 2976,
                        "nodeType": "Return",
                        "src": "42360:211:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2979,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42593:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2981,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42593:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2982,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42607:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2983,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2885,
                          "src": "42607:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2984,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42592:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2986,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42641:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 2987,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2883,
                          "src": "42641:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2988,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "42662:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2985,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "42633:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 2989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "42633:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42592:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2991,
                  "nodeType": "ExpressionStatement",
                  "src": "42592:83:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 2996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2992,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "42689:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 2993,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "42689:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2994,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "42705:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 2995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "42705:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "42689:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3009,
                  "nodeType": "IfStatement",
                  "src": "42685:283:2",
                  "trueBody": {
                    "id": 3008,
                    "nodeType": "Block",
                    "src": "42725:243:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2998,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "42794:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 2999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42794:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3000,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "42832:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "42832:64:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3003,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "42926:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3004,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "42926:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3002,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42918:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3005,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42918:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2997,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "42762:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42762:195:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 3007,
                        "nodeType": "Return",
                        "src": "42739:218:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3010,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42979:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3012,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2881,
                          "src": "42979:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3013,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "42993:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3014,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "42993:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3015,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "42978:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3017,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "43025:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3018,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "43039:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3016,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "43017:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43017:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "42978:74:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3021,
                  "nodeType": "ExpressionStatement",
                  "src": "42978:74:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3022,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "43066:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3023,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2881,
                      "src": "43066:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3024,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "43082:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3025,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "43082:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "43066:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3039,
                  "nodeType": "IfStatement",
                  "src": "43062:274:2",
                  "trueBody": {
                    "id": 3038,
                    "nodeType": "Block",
                    "src": "43102:234:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3028,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "43171:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "43171:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3030,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "43209:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3031,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "43209:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3033,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2948,
                                    "src": "43294:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                                      "typeString": "struct CToken.BorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3034,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2881,
                                  "src": "43294:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "43286:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "43286:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3027,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "43139:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43139:186:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2896,
                        "id": 3037,
                        "nodeType": "Return",
                        "src": "43116:209:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3040,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "43862:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3042,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2879,
                      "src": "43862:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3044,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "43887:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3045,
                          "name": "borrowAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2892,
                          "src": "43897:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3043,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "43873:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "43873:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "43862:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3048,
                  "nodeType": "ExpressionStatement",
                  "src": "43862:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 3054,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3050,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2948,
                            "src": "43928:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                              "typeString": "struct CToken.BorrowLocalVars memory"
                            }
                          },
                          "id": 3051,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2879,
                          "src": "43928:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3052,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "43940:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "43940:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "43928:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "626f72726f77207472616e73666572206f7574206661696c6564",
                        "id": 3055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "43956:28:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_13b0b45622e2392dd38da6433a1b8840f57181a94c7f428896d6f3061de90c3f",
                          "typeString": "literal_string \"borrow transfer out failed\""
                        },
                        "value": "borrow transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_13b0b45622e2392dd38da6433a1b8840f57181a94c7f428896d6f3061de90c3f",
                          "typeString": "literal_string \"borrow transfer out failed\""
                        }
                      ],
                      "id": 3049,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "43920:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "43920:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3057,
                  "nodeType": "ExpressionStatement",
                  "src": "43920:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3058,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "44065:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3060,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3059,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "44080:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "44065:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3061,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "44065:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3062,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "44102:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3063,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2885,
                      "src": "44102:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44065:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3065,
                  "nodeType": "ExpressionStatement",
                  "src": "44065:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3066,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "44134:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3068,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3067,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2890,
                          "src": "44149:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "44134:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3069,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "44134:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3070,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "44175:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44134:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3072,
                  "nodeType": "ExpressionStatement",
                  "src": "44134:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3073,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "44196:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3074,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2948,
                        "src": "44211:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                          "typeString": "struct CToken.BorrowLocalVars memory"
                        }
                      },
                      "id": 3075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2887,
                      "src": "44211:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44196:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3077,
                  "nodeType": "ExpressionStatement",
                  "src": "44196:35:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3079,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "44291:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3080,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "44301:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3081,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2948,
                          "src": "44315:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                            "typeString": "struct CToken.BorrowLocalVars memory"
                          }
                        },
                        "id": 3082,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2885,
                        "src": "44315:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3083,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2948,
                          "src": "44339:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BorrowLocalVars_$2888_memory_ptr",
                            "typeString": "struct CToken.BorrowLocalVars memory"
                          }
                        },
                        "id": 3084,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2887,
                        "src": "44339:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3078,
                      "name": "Borrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 806,
                      "src": "44284:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 3085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44284:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3086,
                  "nodeType": "EmitStatement",
                  "src": "44279:81:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3091,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "44443:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "44435:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3092,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "44435:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3093,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2890,
                        "src": "44450:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3094,
                        "name": "borrowAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2892,
                        "src": "44460:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3087,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "44410:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3089,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "borrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4694,
                      "src": "44410:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 3095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44410:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3096,
                  "nodeType": "ExpressionStatement",
                  "src": "44410:63:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3098,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "44499:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "44499:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "44491:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44491:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2896,
                  "id": 3101,
                  "nodeType": "Return",
                  "src": "44484:30:2"
                }
              ]
            },
            "documentation": "@notice Users borrow assets from the protocol to their own address\n@param borrowAmount The amount of the underlying asset to borrow\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3103,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "borrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2890,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41136:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "41136:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2892,
                  "name": "borrowAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41162:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2891,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41162:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "41135:48:2"
            },
            "returnParameters": {
              "id": 2896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2895,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3103,
                  "src": "41202:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2894,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41202:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "41201:9:2"
            },
            "scope": 4422,
            "src": "41115:3406:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3141,
              "nodeType": "Block",
              "src": "44812:475:2",
              "statements": [
                {
                  "assignments": [
                    3113
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3113,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3141,
                      "src": "44822:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3112,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "44822:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3116,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3114,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "44838:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3115,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44838:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "44822:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3117,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3113,
                      "src": "44868:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3119,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "44885:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "44885:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "44877:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "44877:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "44868:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3132,
                  "nodeType": "IfStatement",
                  "src": "44864:255:2",
                  "trueBody": {
                    "id": 3131,
                    "nodeType": "Block",
                    "src": "44902:217:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3125,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3113,
                                  "src": "45052:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3124,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "45046:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "45046:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3127,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "45060:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3128,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "45060:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3123,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "45041:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45041:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3111,
                        "id": 3130,
                        "nodeType": "Return",
                        "src": "45034:74:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3134,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "45244:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "45244:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3136,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "45256:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3137,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "45256:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3138,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3105,
                        "src": "45268:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3133,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "45227:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "45227:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3111,
                  "id": 3140,
                  "nodeType": "Return",
                  "src": "45220:60:2"
                }
              ]
            },
            "documentation": "@notice Sender repays their own borrow\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3142,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3108,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3107,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "44781:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "44781:12:2"
              }
            ],
            "name": "repayBorrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3105,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3142,
                  "src": "44751:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44751:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "44750:21:2"
            },
            "returnParameters": {
              "id": 3111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3110,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3142,
                  "src": "44803:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "44803:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "44802:9:2"
            },
            "scope": 4422,
            "src": "44722:565:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3181,
              "nodeType": "Block",
              "src": "45681:473:2",
              "statements": [
                {
                  "assignments": [
                    3154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3154,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3181,
                      "src": "45691:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3153,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "45691:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3157,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3155,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "45707:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "45707:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "45691:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3158,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3154,
                      "src": "45737:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3160,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "45754:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "45754:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "45746:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "45746:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "45737:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3173,
                  "nodeType": "IfStatement",
                  "src": "45733:255:2",
                  "trueBody": {
                    "id": 3172,
                    "nodeType": "Block",
                    "src": "45771:217:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3166,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3154,
                                  "src": "45921:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3165,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "45915:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "45915:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3168,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "45929:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3169,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BEHALF_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "45929:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3164,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "45910:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45910:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3152,
                        "id": 3171,
                        "nodeType": "Return",
                        "src": "45903:74:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3175,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "46113:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "46113:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3177,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3144,
                        "src": "46125:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3178,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3146,
                        "src": "46135:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3174,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "46096:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "46096:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3152,
                  "id": 3180,
                  "nodeType": "Return",
                  "src": "46089:58:2"
                }
              ]
            },
            "documentation": "@notice Sender repays a borrow belonging to borrower\n@param borrower the account with the debt being payed off\n@param repayAmount The amount to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3182,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3149,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3148,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "45650:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "45650:12:2"
              }
            ],
            "name": "repayBorrowBehalfInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3147,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3144,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45602:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3143,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45602:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3146,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45620:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3145,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45620:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "45601:39:2"
            },
            "returnParameters": {
              "id": 3152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3151,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3182,
                  "src": "45672:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45672:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "45671:9:2"
            },
            "scope": 4422,
            "src": "45567:587:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "canonicalName": "CToken.RepayBorrowLocalVars",
            "id": 3197,
            "members": [
              {
                "constant": false,
                "id": 3184,
                "name": "err",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46198:9:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_Error_$5069",
                  "typeString": "enum TokenErrorReporter.Error"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3183,
                  "name": "Error",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5069,
                  "src": "46198:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3186,
                "name": "mathErr",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46217:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_MathError_$4429",
                  "typeString": "enum CarefulMath.MathError"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3185,
                  "name": "MathError",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 4429,
                  "src": "46217:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_MathError_$4429",
                    "typeString": "enum CarefulMath.MathError"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3188,
                "name": "repayAmount",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46244:19:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3187,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46244:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3190,
                "name": "borrowerIndex",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46273:21:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3189,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46273:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3192,
                "name": "accountBorrows",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46304:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3191,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46304:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3194,
                "name": "accountBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46336:25:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3193,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46336:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3196,
                "name": "totalBorrowsNew",
                "nodeType": "VariableDeclaration",
                "scope": 3197,
                "src": "46371:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3195,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "46371:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "RepayBorrowLocalVars",
            "nodeType": "StructDefinition",
            "scope": 4422,
            "src": "46160:241:2",
            "visibility": "public"
          },
          {
            "body": {
              "id": 3465,
              "nodeType": "Block",
              "src": "46884:3912:2",
              "statements": [
                {
                  "assignments": [
                    3209
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3209,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3465,
                      "src": "46940:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3208,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "46940:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3219,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3213,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "46997:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "46989:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "46989:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3215,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "47004:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3216,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "47011:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3217,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3203,
                        "src": "47021:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3210,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "46958:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repayBorrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4707,
                      "src": "46958:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "46958:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "46940:93:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3220,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3209,
                      "src": "47047:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3221,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "47058:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "47047:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3232,
                  "nodeType": "IfStatement",
                  "src": "47043:146:2",
                  "trueBody": {
                    "id": 3231,
                    "nodeType": "Block",
                    "src": "47061:128:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3224,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47093:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47093:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3226,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47122:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3227,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47122:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3228,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3209,
                              "src": "47170:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3223,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "47082:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47082:96:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3230,
                        "nodeType": "Return",
                        "src": "47075:103:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3233,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "47274:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3234,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "47296:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47296:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "47274:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3245,
                  "nodeType": "IfStatement",
                  "src": "47270:146:2",
                  "trueBody": {
                    "id": 3244,
                    "nodeType": "Block",
                    "src": "47314:102:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3238,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47340:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47340:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3240,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47364:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3241,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47364:40:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3237,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "47335:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47335:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3243,
                        "nodeType": "Return",
                        "src": "47328:77:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3247,
                      "name": "vars",
                      "nodeType": "VariableDeclaration",
                      "scope": 3465,
                      "src": "47426:32:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                        "typeString": "struct CToken.RepayBorrowLocalVars"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3246,
                        "name": "RepayBorrowLocalVars",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3197,
                        "src": "47426:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_storage_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3248,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "47426:32:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3249,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "47548:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3251,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "borrowerIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3190,
                      "src": "47548:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3252,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "47569:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3254,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3253,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "47584:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "47569:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3255,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "47569:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "47548:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3257,
                  "nodeType": "ExpressionStatement",
                  "src": "47548:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3258,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "47698:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3260,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "47698:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3261,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "47712:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3262,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3192,
                          "src": "47712:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3263,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "47697:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3265,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "47763:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3264,
                        "name": "borrowBalanceStoredInternal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1690,
                        "src": "47735:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (address) view returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47735:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "47697:75:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3268,
                  "nodeType": "ExpressionStatement",
                  "src": "47697:75:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3269,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "47786:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3270,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "47786:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3271,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "47802:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "47802:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "47786:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3286,
                  "nodeType": "IfStatement",
                  "src": "47782:282:2",
                  "trueBody": {
                    "id": 3285,
                    "nodeType": "Block",
                    "src": "47822:242:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3275,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "47891:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47891:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3277,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "47929:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47929:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3280,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "48022:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3281,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "48022:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "48014:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "48014:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3274,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "47859:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47859:194:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3284,
                        "nodeType": "Return",
                        "src": "47836:217:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3287,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3203,
                      "src": "48143:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "48166:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "48167:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 3288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "48158:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48158:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "48143:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3307,
                    "nodeType": "Block",
                    "src": "48240:55:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3301,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48254:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3303,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repayAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3188,
                            "src": "48254:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3304,
                            "name": "repayAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3203,
                            "src": "48273:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48254:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3306,
                        "nodeType": "ExpressionStatement",
                        "src": "48254:30:2"
                      }
                    ]
                  },
                  "id": 3308,
                  "nodeType": "IfStatement",
                  "src": "48139:156:2",
                  "trueBody": {
                    "id": 3300,
                    "nodeType": "Block",
                    "src": "48171:63:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3293,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48185:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3295,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "repayAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3188,
                            "src": "48185:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3296,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3247,
                              "src": "48204:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                "typeString": "struct CToken.RepayBorrowLocalVars memory"
                              }
                            },
                            "id": 3297,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "accountBorrows",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3192,
                            "src": "48204:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48185:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3299,
                        "nodeType": "ExpressionStatement",
                        "src": "48185:38:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3309,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48349:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3311,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "48349:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3313,
                          "name": "payer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3199,
                          "src": "48376:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3314,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48383:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3315,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "48383:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3312,
                        "name": "checkTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "48360:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) view returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48360:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "48349:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3318,
                  "nodeType": "ExpressionStatement",
                  "src": "48349:51:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    },
                    "id": 3323,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3319,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48414:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3320,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "48414:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3321,
                        "name": "Error",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "48426:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                          "typeString": "type(enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "48426:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "48414:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3332,
                  "nodeType": "IfStatement",
                  "src": "48410:129:2",
                  "trueBody": {
                    "id": 3331,
                    "nodeType": "Block",
                    "src": "48442:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3325,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3247,
                                "src": "48468:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                  "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                }
                              },
                              "id": 3326,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "err",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3184,
                              "src": "48468:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3327,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "48478:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "48478:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3324,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "48463:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48463:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3330,
                        "nodeType": "Return",
                        "src": "48456:72:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3345,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3333,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48781:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3335,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "48781:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3336,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48795:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3337,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "accountBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3194,
                          "src": "48795:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3338,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "48780:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3340,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48829:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3341,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "accountBorrows",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3192,
                          "src": "48829:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3342,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "48850:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3343,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "48850:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3339,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "48821:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3344,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48821:46:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "48780:87:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3346,
                  "nodeType": "ExpressionStatement",
                  "src": "48780:87:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3347,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "48881:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3348,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "48881:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3349,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "48897:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "48897:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "48881:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3364,
                  "nodeType": "IfStatement",
                  "src": "48877:289:2",
                  "trueBody": {
                    "id": 3363,
                    "nodeType": "Block",
                    "src": "48917:249:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3353,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "48986:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "48986:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3355,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "49024:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49024:70:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3358,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "49124:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3359,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "49124:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "49116:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49116:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3352,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "48954:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48954:201:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3362,
                        "nodeType": "Return",
                        "src": "48931:224:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3365,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49177:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3367,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "mathErr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3186,
                          "src": "49177:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3368,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49191:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3369,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberName": "totalBorrowsNew",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3196,
                          "src": "49191:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3370,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "49176:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3372,
                          "name": "totalBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 749,
                          "src": "49223:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3373,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "49237:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3374,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "49237:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3371,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "49215:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3375,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "49215:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "49176:78:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3377,
                  "nodeType": "ExpressionStatement",
                  "src": "49176:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3382,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3378,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "49268:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mathErr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3186,
                      "src": "49268:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3380,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "49284:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3381,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "49284:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "49268:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3395,
                  "nodeType": "IfStatement",
                  "src": "49264:280:2",
                  "trueBody": {
                    "id": 3394,
                    "nodeType": "Block",
                    "src": "49304:240:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3384,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "49373:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3385,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49373:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3386,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "49411:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3387,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "49411:61:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3389,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "49502:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                                      "typeString": "struct CToken.RepayBorrowLocalVars memory"
                                    }
                                  },
                                  "id": 3390,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mathErr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3186,
                                  "src": "49502:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3388,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "49494:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49494:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3383,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "49341:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49341:192:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3207,
                        "id": 3393,
                        "nodeType": "Return",
                        "src": "49318:215:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3396,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50075:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3398,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "err",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3184,
                      "src": "50075:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3400,
                          "name": "payer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3199,
                          "src": "50099:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3401,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "50106:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3402,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "repayAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3188,
                          "src": "50106:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3399,
                        "name": "doTransferIn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4412,
                        "src": "50086:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 3403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "50086:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "50075:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 3405,
                  "nodeType": "ExpressionStatement",
                  "src": "50075:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 3411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3407,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "50141:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                              "typeString": "struct CToken.RepayBorrowLocalVars memory"
                            }
                          },
                          "id": 3408,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "err",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3184,
                          "src": "50141:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3409,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "50153:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "50153:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "50141:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726570617920626f72726f77207472616e7366657220696e206661696c6564",
                        "id": 3412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "50169:33:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29884c85cf9dc205de171c8fe8461a00dea3deba5a78a2f43609feec2de30288",
                          "typeString": "literal_string \"repay borrow transfer in failed\""
                        },
                        "value": "repay borrow transfer in failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29884c85cf9dc205de171c8fe8461a00dea3deba5a78a2f43609feec2de30288",
                          "typeString": "literal_string \"repay borrow transfer in failed\""
                        }
                      ],
                      "id": 3406,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "50133:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50133:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3414,
                  "nodeType": "ExpressionStatement",
                  "src": "50133:70:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3415,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "50283:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3417,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3416,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "50298:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "50283:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3418,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "principal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 765,
                      "src": "50283:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3419,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50320:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3420,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "accountBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3194,
                      "src": "50320:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50283:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3422,
                  "nodeType": "ExpressionStatement",
                  "src": "50283:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3423,
                          "name": "accountBorrows",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 772,
                          "src": "50352:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_BorrowSnapshot_$768_storage_$",
                            "typeString": "mapping(address => struct CToken.BorrowSnapshot storage ref)"
                          }
                        },
                        "id": 3425,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3424,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "50367:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "50352:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BorrowSnapshot_$768_storage",
                          "typeString": "struct CToken.BorrowSnapshot storage ref"
                        }
                      },
                      "id": 3426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "interestIndex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 767,
                      "src": "50352:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3427,
                      "name": "borrowIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 747,
                      "src": "50393:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50352:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3429,
                  "nodeType": "ExpressionStatement",
                  "src": "50352:52:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3430,
                      "name": "totalBorrows",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 749,
                      "src": "50414:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3431,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3247,
                        "src": "50429:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                          "typeString": "struct CToken.RepayBorrowLocalVars memory"
                        }
                      },
                      "id": 3432,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalBorrowsNew",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3196,
                      "src": "50429:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "50414:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3434,
                  "nodeType": "ExpressionStatement",
                  "src": "50414:35:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3436,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "50519:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3437,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "50526:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3438,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50536:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repayAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3188,
                        "src": "50536:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3440,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50554:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3441,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accountBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3194,
                        "src": "50554:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3442,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50578:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalBorrowsNew",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3196,
                        "src": "50578:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3435,
                      "name": "RepayBorrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 818,
                      "src": "50507:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 3444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50507:92:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3445,
                  "nodeType": "EmitStatement",
                  "src": "50502:97:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3450,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "50687:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "50679:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "50679:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3452,
                        "name": "payer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3199,
                        "src": "50694:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3453,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3201,
                        "src": "50701:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3454,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50711:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3455,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "repayAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3188,
                        "src": "50711:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3456,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3247,
                          "src": "50729:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RepayBorrowLocalVars_$3197_memory_ptr",
                            "typeString": "struct CToken.RepayBorrowLocalVars memory"
                          }
                        },
                        "id": 3457,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "borrowerIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3190,
                        "src": "50729:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3446,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "50649:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "repayBorrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4720,
                      "src": "50649:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256) external"
                      }
                    },
                    "id": 3458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50649:99:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3459,
                  "nodeType": "ExpressionStatement",
                  "src": "50649:99:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3461,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "50774:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "50774:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "50766:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50766:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3207,
                  "id": 3464,
                  "nodeType": "Return",
                  "src": "50759:30:2"
                }
              ]
            },
            "documentation": "@notice Borrows are repaid by another user (possibly the borrower).\n@param payer the account paying off the borrow\n@param borrower the account with the debt being payed off\n@param repayAmount the amount of undelrying tokens being returned\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3466,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3204,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3199,
                  "name": "payer",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46803:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "46803:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3201,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46818:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3200,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "46818:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3203,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46836:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3202,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "46836:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "46802:54:2"
            },
            "returnParameters": {
              "id": 3207,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3206,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3466,
                  "src": "46875:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3205,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "46875:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "46874:9:2"
            },
            "scope": 4422,
            "src": "46777:4019:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3530,
              "nodeType": "Block",
              "src": "51433:832:2",
              "statements": [
                {
                  "assignments": [
                    3480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3480,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 3530,
                      "src": "51443:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3479,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "51443:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3483,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3481,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "51459:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 3482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "51459:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "51443:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3484,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51489:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3486,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "51506:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "51506:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "51498:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51498:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51489:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3499,
                  "nodeType": "IfStatement",
                  "src": "51485:264:2",
                  "trueBody": {
                    "id": 3498,
                    "nodeType": "Block",
                    "src": "51523:226:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3492,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3480,
                                  "src": "51678:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3491,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "51672:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51672:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3494,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "51686:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "51686:51:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3490,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "51667:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51667:71:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3497,
                        "nodeType": "Return",
                        "src": "51660:78:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3500,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51759:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3501,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3472,
                          "src": "51767:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accrueInterest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2113,
                        "src": "51767:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                          "typeString": "function () external returns (uint256)"
                        }
                      },
                      "id": 3503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51767:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51759:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3505,
                  "nodeType": "ExpressionStatement",
                  "src": "51759:41:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3506,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3480,
                      "src": "51814:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3508,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "51831:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "51831:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "51823:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "51823:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "51814:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3521,
                  "nodeType": "IfStatement",
                  "src": "51810:268:2",
                  "trueBody": {
                    "id": 3520,
                    "nodeType": "Block",
                    "src": "51848:230:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3514,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3480,
                                  "src": "52003:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3513,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "51997:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51997:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3516,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "52011:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "52011:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3512,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "51992:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51992:75:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3478,
                        "id": 3519,
                        "nodeType": "Return",
                        "src": "51985:82:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3523,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "52206:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "52206:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3525,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3468,
                        "src": "52218:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3526,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3470,
                        "src": "52228:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3527,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3472,
                        "src": "52241:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      ],
                      "id": 3522,
                      "name": "liquidateBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3756,
                      "src": "52185:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_contract$_CToken_$4422_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,contract CToken) returns (uint256)"
                      }
                    },
                    "id": 3528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "52185:73:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3478,
                  "id": 3529,
                  "nodeType": "Return",
                  "src": "52178:80:2"
                }
              ]
            },
            "documentation": "@notice The sender liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3531,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3475,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3474,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "51390:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "51390:12:2"
              }
            ],
            "name": "liquidateBorrowInternal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3468,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51301:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "51301:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3470,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51319:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3469,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "51319:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3472,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51340:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3471,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "51340:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "51300:64:2"
            },
            "returnParameters": {
              "id": 3478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3477,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3531,
                  "src": "51420:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "51420:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "51419:9:2"
            },
            "scope": 4422,
            "src": "51268:997:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3755,
              "nodeType": "Block",
              "src": "52982:3307:2",
              "statements": [
                {
                  "assignments": [
                    3545
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3545,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "53036:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3544,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "53036:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3558,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3549,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "53110:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "53102:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "53102:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3552,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "53137:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "53129:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "53129:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3554,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "53168:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3555,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "53192:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3556,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "53214:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3546,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "53054:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateBorrowAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4735,
                      "src": "53054:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "53054:181:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "53036:199:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3559,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3545,
                      "src": "53249:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "53260:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "53249:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3571,
                  "nodeType": "IfStatement",
                  "src": "53245:143:2",
                  "trueBody": {
                    "id": 3570,
                    "nodeType": "Block",
                    "src": "53263:125:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3563,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53295:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53295:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3565,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53324:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3566,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53324:43:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3567,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3545,
                              "src": "53369:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3562,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "53284:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53284:93:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3569,
                        "nodeType": "Return",
                        "src": "53277:100:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3572,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "53473:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3573,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "53495:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53495:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "53473:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3584,
                  "nodeType": "IfStatement",
                  "src": "53469:143:2",
                  "trueBody": {
                    "id": 3583,
                    "nodeType": "Block",
                    "src": "53513:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3577,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53539:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3578,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53539:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3579,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53563:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53563:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3576,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53534:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53534:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3582,
                        "nodeType": "Return",
                        "src": "53527:74:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3585,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3539,
                          "src": "53714:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3586,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "accrualBlockNumber",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 745,
                        "src": "53714:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                          "typeString": "function () view external returns (uint256)"
                        }
                      },
                      "id": 3587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53714:37:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3588,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "53755:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 3589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "53755:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "53714:57:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3599,
                  "nodeType": "IfStatement",
                  "src": "53710:173:2",
                  "trueBody": {
                    "id": 3598,
                    "nodeType": "Block",
                    "src": "53773:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3592,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53799:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53799:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3594,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "53823:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COLLATERAL_FRESHNESS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53823:48:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3591,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53794:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53794:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3597,
                        "nodeType": "Return",
                        "src": "53787:85:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3600,
                      "name": "borrower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3535,
                      "src": "53941:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3601,
                      "name": "liquidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3533,
                      "src": "53953:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "53941:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3611,
                  "nodeType": "IfStatement",
                  "src": "53937:138:2",
                  "trueBody": {
                    "id": 3610,
                    "nodeType": "Block",
                    "src": "53965:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3604,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "53991:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3605,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_ACCOUNT_PAIR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "53991:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3606,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54019:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_LIQUIDATOR_IS_BORROWER",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54019:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3603,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "53986:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "53986:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3609,
                        "nodeType": "Return",
                        "src": "53979:85:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3612,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "54127:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "54142:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "54127:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3623,
                  "nodeType": "IfStatement",
                  "src": "54123:140:2",
                  "trueBody": {
                    "id": 3622,
                    "nodeType": "Block",
                    "src": "54145:118:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3616,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54171:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_CLOSE_AMOUNT_REQUESTED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54171:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3618,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54209:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_CLOSE_AMOUNT_IS_ZERO",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54209:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3615,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "54166:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54166:86:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3621,
                        "nodeType": "Return",
                        "src": "54159:93:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3624,
                      "name": "repayAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3537,
                      "src": "54316:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "54339:2:2",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 3626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "54340:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 3625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "54331:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "54331:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "54316:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3638,
                  "nodeType": "IfStatement",
                  "src": "54312:154:2",
                  "trueBody": {
                    "id": 3637,
                    "nodeType": "Block",
                    "src": "54344:122:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3631,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54370:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3632,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_CLOSE_AMOUNT_REQUESTED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54370:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3633,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54408:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54408:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3630,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "54365:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54365:90:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3636,
                        "nodeType": "Return",
                        "src": "54358:97:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3640,
                    3642
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3640,
                      "name": "amountSeizeError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "54556:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3639,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "54556:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3642,
                      "name": "seizeTokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "54582:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3641,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "54582:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3653,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3646,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "54668:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "54660:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3647,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "54660:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3649,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "54695:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "54687:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "54687:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3651,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "54726:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3643,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "54605:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3644,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateCalculateSeizeTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4815,
                      "src": "54605:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address,address,uint256) view external returns (uint256,uint256)"
                      }
                    },
                    "id": 3652,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "54605:142:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "54555:192:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3654,
                      "name": "amountSeizeError",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3640,
                      "src": "54761:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "54781:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "54761:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3666,
                  "nodeType": "IfStatement",
                  "src": "54757:283:2",
                  "trueBody": {
                    "id": 3665,
                    "nodeType": "Block",
                    "src": "54784:256:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3658,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "54853:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_CALCULATION_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54853:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3660,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "54910:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "54910:63:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3662,
                              "name": "amountSeizeError",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3640,
                              "src": "54995:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3657,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "54821:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "54821:208:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3664,
                        "nodeType": "Return",
                        "src": "54798:231:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3667,
                      "name": "seizeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3642,
                      "src": "55124:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3670,
                          "name": "borrower",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3535,
                          "src": "55165:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3668,
                          "name": "cTokenCollateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3539,
                          "src": "55138:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CToken_$4422",
                            "typeString": "contract CToken"
                          }
                        },
                        "id": 3669,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1273,
                        "src": "55138:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 3671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "55138:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "55124:50:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3681,
                  "nodeType": "IfStatement",
                  "src": "55120:164:2",
                  "trueBody": {
                    "id": 3680,
                    "nodeType": "Block",
                    "src": "55176:108:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3674,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55202:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3675,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_BALANCE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55202:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3676,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "55236:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_TOO_MUCH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55236:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3673,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "55197:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55197:76:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3679,
                        "nodeType": "Return",
                        "src": "55190:83:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3683
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3683,
                      "name": "repayBorrowError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "55334:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3682,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "55334:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3689,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3685,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55378:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3686,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55390:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3687,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "55400:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3684,
                      "name": "repayBorrowFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3466,
                      "src": "55361:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) returns (uint256)"
                      }
                    },
                    "id": 3688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55361:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "55334:78:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3690,
                      "name": "repayBorrowError",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3683,
                      "src": "55426:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3692,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "55454:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 3693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "55454:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 3691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "55446:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 3694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "55446:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "55426:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3705,
                  "nodeType": "IfStatement",
                  "src": "55422:159:2",
                  "trueBody": {
                    "id": 3704,
                    "nodeType": "Block",
                    "src": "55471:110:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3698,
                                  "name": "repayBorrowError",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3683,
                                  "src": "55503:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3697,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55497:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "55497:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3700,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "55522:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_REPAY_BORROW_FRESH_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55522:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3696,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "55492:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55492:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3543,
                        "id": 3703,
                        "nodeType": "Return",
                        "src": "55485:85:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3707
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3707,
                      "name": "seizeError",
                      "nodeType": "VariableDeclaration",
                      "scope": 3755,
                      "src": "55676:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3706,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "55676:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3714,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3710,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55720:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3711,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55732:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3712,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "55742:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3708,
                        "name": "cTokenCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3539,
                        "src": "55697:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CToken_$4422",
                          "typeString": "contract CToken"
                        }
                      },
                      "id": 3709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3908,
                      "src": "55697:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55697:57:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "55676:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3716,
                          "name": "seizeError",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3707,
                          "src": "55772:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3718,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "55794:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "NO_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "55794:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            ],
                            "id": 3717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "55786:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "55786:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "55772:37:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "746f6b656e207365697a757265206661696c6564",
                        "id": 3722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "55811:22:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ef895053050823f299d1eac7edac9fbaf6b5ee335d1b858874856cee7182bcda",
                          "typeString": "literal_string \"token seizure failed\""
                        },
                        "value": "token seizure failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ef895053050823f299d1eac7edac9fbaf6b5ee335d1b858874856cee7182bcda",
                          "typeString": "literal_string \"token seizure failed\""
                        }
                      ],
                      "id": 3715,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "55764:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55764:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3724,
                  "nodeType": "ExpressionStatement",
                  "src": "55764:70:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3726,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "55912:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3727,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "55924:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3728,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "55934:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3730,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "55955:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "55947:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "55947:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3732,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "55974:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3725,
                      "name": "LiquidateBorrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 830,
                      "src": "55896:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,address,uint256)"
                      }
                    },
                    "id": 3733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "55896:90:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3734,
                  "nodeType": "EmitStatement",
                  "src": "55891:95:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3739,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "56091:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "56083:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "56083:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3742,
                            "name": "cTokenCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3539,
                            "src": "56118:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "56110:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "56110:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3744,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3533,
                        "src": "56149:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3745,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3535,
                        "src": "56173:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3746,
                        "name": "repayAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3537,
                        "src": "56195:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3747,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3642,
                        "src": "56220:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3735,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "56036:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "liquidateBorrowVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4750,
                      "src": "56036:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256,uint256) external"
                      }
                    },
                    "id": 3748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "56036:205:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3749,
                  "nodeType": "ExpressionStatement",
                  "src": "56036:205:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3751,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "56267:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3752,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "56267:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "56259:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "56259:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3543,
                  "id": 3754,
                  "nodeType": "Return",
                  "src": "56252:30:2"
                }
              ]
            },
            "documentation": "@notice The liquidator liquidates the borrowers collateral.\n The collateral seized is transferred to the liquidator.\n@param borrower The borrower of this cToken to be liquidated\n@param liquidator The address repaying the borrow and seizing collateral\n@param cTokenCollateral The market in which to seize collateral from the borrower\n@param repayAmount The amount of the underlying borrowed asset to repay\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3756,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "liquidateBorrowFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3540,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3533,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52851:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3532,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "52851:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3535,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52871:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3534,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "52871:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3537,
                  "name": "repayAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52889:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3536,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52889:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3539,
                  "name": "cTokenCollateral",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52910:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_CToken_$4422",
                    "typeString": "contract CToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3538,
                    "name": "CToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4422,
                    "src": "52910:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CToken_$4422",
                      "typeString": "contract CToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "52850:84:2"
            },
            "returnParameters": {
              "id": 3543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3542,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3756,
                  "src": "52969:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3541,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52969:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "52968:9:2"
            },
            "scope": 4422,
            "src": "52821:3468:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3907,
              "nodeType": "Block",
              "src": "56953:1985:2",
              "statements": [
                {
                  "assignments": [
                    3770
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3770,
                      "name": "allowed",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57003:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3769,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57003:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3782,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3774,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "57054:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "57046:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "57046:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3776,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "57061:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3777,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "57061:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3778,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "57073:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3779,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "57085:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3780,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "57095:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3771,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "57021:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeAllowed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4765,
                      "src": "57021:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,address,address,uint256) external returns (uint256)"
                      }
                    },
                    "id": 3781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "57021:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57003:104:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3783,
                      "name": "allowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3770,
                      "src": "57121:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "57132:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "57121:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3795,
                  "nodeType": "IfStatement",
                  "src": "57117:149:2",
                  "trueBody": {
                    "id": 3794,
                    "nodeType": "Block",
                    "src": "57135:131:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3787,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57167:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3788,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57167:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3789,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "57196:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_COMPTROLLER_REJECTION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57196:49:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3791,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3770,
                              "src": "57247:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3786,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "57156:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57156:99:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3793,
                        "nodeType": "Return",
                        "src": "57149:106:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3796,
                      "name": "borrower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3760,
                      "src": "57324:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3797,
                      "name": "liquidator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3758,
                      "src": "57336:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "57324:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3807,
                  "nodeType": "IfStatement",
                  "src": "57320:144:2",
                  "trueBody": {
                    "id": 3806,
                    "nodeType": "Block",
                    "src": "57348:116:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3800,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57374:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "INVALID_ACCOUNT_PAIR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57374:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3802,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "57402:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57402:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3799,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "57369:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57369:84:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3805,
                        "nodeType": "Return",
                        "src": "57362:91:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3809,
                      "name": "mathErr",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57474:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3808,
                        "name": "MathError",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4429,
                        "src": "57474:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_MathError_$4429",
                          "typeString": "enum CarefulMath.MathError"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3810,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57474:17:2"
                },
                {
                  "assignments": [
                    3812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3812,
                      "name": "borrowerTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57501:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3811,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57501:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3813,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57501:25:2"
                },
                {
                  "assignments": [
                    3815
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3815,
                      "name": "liquidatorTokensNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 3907,
                      "src": "57536:27:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3814,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "57536:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3816,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "57536:27:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 3817,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3809,
                          "src": "57845:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3818,
                          "name": "borrowerTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3812,
                          "src": "57854:17:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3819,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "57844:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3821,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "57883:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3823,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3822,
                            "name": "borrower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3760,
                            "src": "57897:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "57883:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3824,
                          "name": "seizeTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3762,
                          "src": "57908:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3820,
                        "name": "subUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4534,
                        "src": "57875:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3825,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "57875:45:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "57844:76:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3827,
                  "nodeType": "ExpressionStatement",
                  "src": "57844:76:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3828,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3809,
                      "src": "57934:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3829,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "57945:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "57945:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "57934:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3843,
                  "nodeType": "IfStatement",
                  "src": "57930:167:2",
                  "trueBody": {
                    "id": 3842,
                    "nodeType": "Block",
                    "src": "57965:132:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3833,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "57997:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57997:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3835,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "58015:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58015:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3838,
                                  "name": "mathErr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3809,
                                  "src": "58077:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "58069:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3839,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58069:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3832,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "57986:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57986:100:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3841,
                        "nodeType": "Return",
                        "src": "57979:107:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 3844,
                          "name": "mathErr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3809,
                          "src": "58108:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_MathError_$4429",
                            "typeString": "enum CarefulMath.MathError"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3845,
                          "name": "liquidatorTokensNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3815,
                          "src": "58117:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 3846,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "58107:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3848,
                            "name": "accountTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 757,
                            "src": "58148:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3850,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3849,
                            "name": "liquidator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3758,
                            "src": "58162:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "58148:25:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3851,
                          "name": "seizeTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3762,
                          "src": "58175:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3847,
                        "name": "addUInt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4568,
                        "src": "58140:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_enum$_MathError_$4429_$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (enum CarefulMath.MathError,uint256)"
                        }
                      },
                      "id": 3852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "58140:47:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_enum$_MathError_$4429_$_t_uint256_$",
                        "typeString": "tuple(enum CarefulMath.MathError,uint256)"
                      }
                    },
                    "src": "58107:80:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3854,
                  "nodeType": "ExpressionStatement",
                  "src": "58107:80:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_MathError_$4429",
                      "typeString": "enum CarefulMath.MathError"
                    },
                    "id": 3858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3855,
                      "name": "mathErr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3809,
                      "src": "58201:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3856,
                        "name": "MathError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4429,
                        "src": "58212:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_MathError_$4429_$",
                          "typeString": "type(enum CarefulMath.MathError)"
                        }
                      },
                      "id": 3857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "NO_ERROR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "58212:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_MathError_$4429",
                        "typeString": "enum CarefulMath.MathError"
                      }
                    },
                    "src": "58201:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3870,
                  "nodeType": "IfStatement",
                  "src": "58197:167:2",
                  "trueBody": {
                    "id": 3869,
                    "nodeType": "Block",
                    "src": "58232:132:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3860,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "58264:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MATH_ERROR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58264:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3862,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "58282:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "58282:52:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3865,
                                  "name": "mathErr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3809,
                                  "src": "58344:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_MathError_$4429",
                                    "typeString": "enum CarefulMath.MathError"
                                  }
                                ],
                                "id": 3864,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "58336:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": "uint256"
                              },
                              "id": 3866,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58336:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3859,
                            "name": "failOpaque",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5206,
                            "src": "58253:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo,uint256) returns (uint256)"
                            }
                          },
                          "id": 3867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58253:100:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3768,
                        "id": 3868,
                        "nodeType": "Return",
                        "src": "58246:107:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3871,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "58560:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3873,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3872,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58574:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "58560:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3874,
                      "name": "borrowerTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3812,
                      "src": "58586:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "58560:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3876,
                  "nodeType": "ExpressionStatement",
                  "src": "58560:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3877,
                        "name": "accountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 757,
                        "src": "58613:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3879,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3878,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58627:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "58613:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3880,
                      "name": "liquidatorTokensNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3815,
                      "src": "58641:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "58613:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3882,
                  "nodeType": "ExpressionStatement",
                  "src": "58613:47:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3884,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58721:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3885,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58731:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3886,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "58743:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3883,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4876,
                      "src": "58712:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58712:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3888,
                  "nodeType": "EmitStatement",
                  "src": "58707:48:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3893,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11517,
                            "src": "58837:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CToken_$4422",
                              "typeString": "contract CToken"
                            }
                          ],
                          "id": 3892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "58829:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3894,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "58829:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3895,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "58844:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "58844:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3897,
                        "name": "liquidator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3758,
                        "src": "58856:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3898,
                        "name": "borrower",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3760,
                        "src": "58868:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3899,
                        "name": "seizeTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3762,
                        "src": "58878:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3889,
                        "name": "comptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 737,
                        "src": "58805:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "id": 3891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeVerify",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4778,
                      "src": "58805:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,uint256) external"
                      }
                    },
                    "id": 3900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58805:85:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3901,
                  "nodeType": "ExpressionStatement",
                  "src": "58805:85:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3903,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "58916:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "58916:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "58908:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "58908:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3768,
                  "id": 3906,
                  "nodeType": "Return",
                  "src": "58901:30:2"
                }
              ]
            },
            "documentation": "@notice Transfers collateral tokens (this market) to the liquidator.\n@dev Will fail unless called by another cToken during the process of liquidation.\n Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.\n@param liquidator The account receiving seized collateral\n@param borrower The account having collateral seized\n@param seizeTokens The number of cTokens to seize\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 3908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 3765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3764,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "56922:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "56922:12:2"
              }
            ],
            "name": "seize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3758,
                  "name": "liquidator",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56854:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3757,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "56854:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3760,
                  "name": "borrower",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56874:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "56874:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3762,
                  "name": "seizeTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56892:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3761,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "56892:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "56853:59:2"
            },
            "returnParameters": {
              "id": 3768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3767,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3908,
                  "src": "56944:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3766,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "56944:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "56943:9:2"
            },
            "scope": 4422,
            "src": "56839:2099:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3946,
              "nodeType": "Block",
              "src": "59560:551:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 3918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3915,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "59606:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "59606:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3917,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "59620:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "59606:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3927,
                  "nodeType": "IfStatement",
                  "src": "59602:124:2",
                  "trueBody": {
                    "id": 3926,
                    "nodeType": "Block",
                    "src": "59627:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3920,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "59653:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "59653:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3922,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "59673:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3923,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_PENDING_ADMIN_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "59673:41:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3919,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "59648:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59648:67:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3914,
                        "id": 3925,
                        "nodeType": "Return",
                        "src": "59641:74:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3929,
                      "name": "oldPendingAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 3946,
                      "src": "59796:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3928,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "59796:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3931,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3930,
                    "name": "pendingAdmin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 735,
                    "src": "59822:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "59796:38:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3932,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "59902:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3933,
                      "name": "newPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3910,
                      "src": "59917:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "59902:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3935,
                  "nodeType": "ExpressionStatement",
                  "src": "59902:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3937,
                        "name": "oldPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3929,
                        "src": "60030:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3938,
                        "name": "newPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3910,
                        "src": "60047:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3936,
                      "name": "NewPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 836,
                      "src": "60014:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60014:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3940,
                  "nodeType": "EmitStatement",
                  "src": "60009:54:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3942,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "60089:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 3943,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60089:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 3941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "60081:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 3944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60081:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3914,
                  "id": 3945,
                  "nodeType": "Return",
                  "src": "60074:30:2"
                }
              ]
            },
            "documentation": "@notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@param newPendingAdmin New pending admin.\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\n      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?",
            "id": 3947,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setPendingAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3911,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3910,
                  "name": "newPendingAdmin",
                  "nodeType": "VariableDeclaration",
                  "scope": 3947,
                  "src": "59500:31:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3909,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "59500:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "59499:33:2"
            },
            "returnParameters": {
              "id": 3914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3913,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3947,
                  "src": "59551:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "59551:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "59550:9:2"
            },
            "scope": 4422,
            "src": "59474:637:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4005,
              "nodeType": "Block",
              "src": "60433:677:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "id": 3955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3952,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "60519:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60519:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3954,
                        "name": "pendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "60533:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "60519:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "id": 3961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3956,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11485,
                          "src": "60549:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "60549:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "60571:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "60563:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3960,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "60563:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "60549:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "60519:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3971,
                  "nodeType": "IfStatement",
                  "src": "60515:162:2",
                  "trueBody": {
                    "id": 3970,
                    "nodeType": "Block",
                    "src": "60575:102:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3964,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "60601:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 3965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "60601:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3966,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "60621:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 3967,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "60621:44:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 3963,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "60596:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 3968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60596:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 3951,
                        "id": 3969,
                        "nodeType": "Return",
                        "src": "60589:77:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3973
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3973,
                      "name": "oldAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 4005,
                      "src": "60739:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3972,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "60739:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3975,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3974,
                    "name": "admin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 733,
                    "src": "60758:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "60739:24:2"
                },
                {
                  "assignments": [
                    3977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3977,
                      "name": "oldPendingAdmin",
                      "nodeType": "VariableDeclaration",
                      "scope": 4005,
                      "src": "60773:23:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3976,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "60773:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3979,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 3978,
                    "name": "pendingAdmin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 735,
                    "src": "60799:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "60773:38:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3980,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "60869:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3981,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "60877:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "60869:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3983,
                  "nodeType": "ExpressionStatement",
                  "src": "60869:20:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3984,
                      "name": "pendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 735,
                      "src": "60935:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "60958:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "60950:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3987,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "60950:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "60935:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3989,
                  "nodeType": "ExpressionStatement",
                  "src": "60935:25:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3991,
                        "name": "oldAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3973,
                        "src": "60985:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3992,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 733,
                        "src": "60995:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3990,
                      "name": "NewAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 842,
                      "src": "60976:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "60976:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3994,
                  "nodeType": "EmitStatement",
                  "src": "60971:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "oldPendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3977,
                        "src": "61032:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3997,
                        "name": "pendingAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 735,
                        "src": "61049:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3995,
                      "name": "NewPendingAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 836,
                      "src": "61016:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61016:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3999,
                  "nodeType": "EmitStatement",
                  "src": "61011:51:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4001,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "61088:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "61088:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "61080:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61080:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3951,
                  "id": 4004,
                  "nodeType": "Return",
                  "src": "61073:30:2"
                }
              ]
            },
            "documentation": "@notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\n@dev Admin function for pending admin to accept role and update admin\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_acceptAdmin",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3948,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "60403:2:2"
            },
            "returnParameters": {
              "id": 3951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3950,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4006,
                  "src": "60424:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "60424:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "60423:9:2"
            },
            "scope": 4422,
            "src": "60382:728:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4051,
              "nodeType": "Block",
              "src": "61415:637:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4013,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "61462:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4014,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "61462:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4015,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "61476:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "61462:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4025,
                  "nodeType": "IfStatement",
                  "src": "61458:122:2",
                  "trueBody": {
                    "id": 4024,
                    "nodeType": "Block",
                    "src": "61483:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4018,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "61509:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "61509:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4020,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "61529:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_COMPTROLLER_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "61529:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4017,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "61504:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "61504:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4012,
                        "id": 4023,
                        "nodeType": "Return",
                        "src": "61497:72:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4027
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4027,
                      "name": "oldComptroller",
                      "nodeType": "VariableDeclaration",
                      "scope": 4051,
                      "src": "61590:35:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4026,
                        "name": "ComptrollerInterface",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4816,
                        "src": "61590:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4029,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4028,
                    "name": "comptroller",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 737,
                    "src": "61628:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "61590:49:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4031,
                            "name": "newComptroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4008,
                            "src": "61723:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                              "typeString": "contract ComptrollerInterface"
                            }
                          },
                          "id": 4032,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isComptroller",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4614,
                          "src": "61723:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                            "typeString": "function () view external returns (bool)"
                          }
                        },
                        "id": 4033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "61723:30:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6d61726b6572206d6574686f642072657475726e65642066616c7365",
                        "id": 4034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "61755:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        },
                        "value": "marker method returned false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        }
                      ],
                      "id": 4030,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "61715:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61715:71:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4036,
                  "nodeType": "ExpressionStatement",
                  "src": "61715:71:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4037,
                      "name": "comptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 737,
                      "src": "61851:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4038,
                      "name": "newComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "61865:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                        "typeString": "contract ComptrollerInterface"
                      }
                    },
                    "src": "61851:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "id": 4040,
                  "nodeType": "ExpressionStatement",
                  "src": "61851:28:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "oldComptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4027,
                        "src": "61973:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4043,
                        "name": "newComptroller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4008,
                        "src": "61989:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        },
                        {
                          "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                          "typeString": "contract ComptrollerInterface"
                        }
                      ],
                      "id": 4041,
                      "name": "NewComptroller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 848,
                      "src": "61958:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_ComptrollerInterface_$4816_$_t_contract$_ComptrollerInterface_$4816_$returns$__$",
                        "typeString": "function (contract ComptrollerInterface,contract ComptrollerInterface)"
                      }
                    },
                    "id": 4044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "61958:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4045,
                  "nodeType": "EmitStatement",
                  "src": "61953:51:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4047,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "62030:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4048,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "62030:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4046,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "62022:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62022:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4012,
                  "id": 4050,
                  "nodeType": "Return",
                  "src": "62015:30:2"
                }
              ]
            },
            "documentation": "@notice Sets a new comptroller for the market\n@dev Admin function to set a new comptroller\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setComptroller",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4008,
                  "name": "newComptroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 4052,
                  "src": "61353:35:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                    "typeString": "contract ComptrollerInterface"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4007,
                    "name": "ComptrollerInterface",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4816,
                    "src": "61353:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ComptrollerInterface_$4816",
                      "typeString": "contract ComptrollerInterface"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "61352:37:2"
            },
            "returnParameters": {
              "id": 4012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4011,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4052,
                  "src": "61406:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4010,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "61406:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "61405:9:2"
            },
            "scope": 4422,
            "src": "61328:724:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4086,
              "nodeType": "Block",
              "src": "62449:510:2",
              "statements": [
                {
                  "assignments": [
                    4062
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4062,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4086,
                      "src": "62459:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4061,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "62459:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4063,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "62475:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62475:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "62459:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4066,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4062,
                      "src": "62505:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4068,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "62522:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "62522:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "62514:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "62514:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "62505:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4081,
                  "nodeType": "IfStatement",
                  "src": "62501:286:2",
                  "trueBody": {
                    "id": 4080,
                    "nodeType": "Block",
                    "src": "62539:248:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4074,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4062,
                                  "src": "62714:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4073,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "62708:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "62708:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4076,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "62722:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4077,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "62722:53:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4072,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "62703:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "62703:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4060,
                        "id": 4079,
                        "nodeType": "Return",
                        "src": "62696:80:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4083,
                        "name": "newReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4054,
                        "src": "62927:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4082,
                      "name": "_setReserveFactorFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4151,
                      "src": "62904:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "62904:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4060,
                  "id": 4085,
                  "nodeType": "Return",
                  "src": "62897:55:2"
                }
              ]
            },
            "documentation": "@notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh\n@dev Admin function to accrue interest and set a new reserve factor\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4087,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4056,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "62418:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "62418:12:2"
              }
            ],
            "name": "_setReserveFactor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4054,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 4087,
                  "src": "62375:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4053,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "62375:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "62374:34:2"
            },
            "returnParameters": {
              "id": 4060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4059,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4087,
                  "src": "62440:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "62440:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "62439:9:2"
            },
            "scope": 4422,
            "src": "62348:611:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4150,
              "nodeType": "Block",
              "src": "63313:922:2",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4094,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "63360:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4095,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "63360:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4096,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "63374:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "63360:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4106,
                  "nodeType": "IfStatement",
                  "src": "63356:125:2",
                  "trueBody": {
                    "id": 4105,
                    "nodeType": "Block",
                    "src": "63381:100:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4099,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63407:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4100,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63407:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4101,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63427:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63427:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4098,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63402:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63402:68:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4104,
                        "nodeType": "Return",
                        "src": "63395:75:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4107,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "63563:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4108,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "63585:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "63585:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "63563:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4119,
                  "nodeType": "IfStatement",
                  "src": "63559:200:2",
                  "trueBody": {
                    "id": 4118,
                    "nodeType": "Block",
                    "src": "63603:156:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4112,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63681:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4113,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63681:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4114,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63705:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63705:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4111,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63676:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63676:72:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4117,
                        "nodeType": "Return",
                        "src": "63669:79:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4120,
                      "name": "newReserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4089,
                      "src": "63828:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4121,
                      "name": "reserveFactorMaxMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 731,
                      "src": "63855:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "63828:51:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4131,
                  "nodeType": "IfStatement",
                  "src": "63824:155:2",
                  "trueBody": {
                    "id": 4130,
                    "nodeType": "Block",
                    "src": "63881:98:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4124,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "63907:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63907:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4126,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "63924:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_RESERVE_FACTOR_BOUNDS_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "63924:43:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4123,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "63902:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "63902:66:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4093,
                        "id": 4129,
                        "nodeType": "Return",
                        "src": "63895:73:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4133
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4133,
                      "name": "oldReserveFactorMantissa",
                      "nodeType": "VariableDeclaration",
                      "scope": 4150,
                      "src": "63989:32:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4132,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "63989:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4135,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4134,
                    "name": "reserveFactorMantissa",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 743,
                    "src": "64024:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "63989:56:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4136,
                      "name": "reserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 743,
                      "src": "64055:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4137,
                      "name": "newReserveFactorMantissa",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4089,
                      "src": "64079:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "64055:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4139,
                  "nodeType": "ExpressionStatement",
                  "src": "64055:48:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4141,
                        "name": "oldReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4133,
                        "src": "64136:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4142,
                        "name": "newReserveFactorMantissa",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4089,
                        "src": "64162:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4140,
                      "name": "NewReserveFactor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 860,
                      "src": "64119:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64119:68:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4144,
                  "nodeType": "EmitStatement",
                  "src": "64114:73:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4146,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "64213:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "64213:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4145,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "64205:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64205:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4093,
                  "id": 4149,
                  "nodeType": "Return",
                  "src": "64198:30:2"
                }
              ]
            },
            "documentation": "@notice Sets a new reserve factor for the protocol (*requires fresh interest accrual)\n@dev Admin function to set a new reserve factor\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4151,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setReserveFactorFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4089,
                  "name": "newReserveFactorMantissa",
                  "nodeType": "VariableDeclaration",
                  "scope": 4151,
                  "src": "63252:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4088,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "63252:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "63251:34:2"
            },
            "returnParameters": {
              "id": 4093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4092,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4151,
                  "src": "63304:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4091,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "63304:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "63303:9:2"
            },
            "scope": 4422,
            "src": "63220:1015:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4185,
              "nodeType": "Block",
              "src": "64568:488:2",
              "statements": [
                {
                  "assignments": [
                    4161
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4161,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4185,
                      "src": "64578:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4160,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "64578:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4164,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4162,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "64594:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "64594:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "64578:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4165,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4161,
                      "src": "64624:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4167,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "64641:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "64641:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4166,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "64633:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "64633:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "64624:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4180,
                  "nodeType": "IfStatement",
                  "src": "64620:277:2",
                  "trueBody": {
                    "id": 4179,
                    "nodeType": "Block",
                    "src": "64658:239:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4173,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4161,
                                  "src": "64827:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4172,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "64821:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "64821:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4175,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "64835:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "64835:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4171,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "64816:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "64816:70:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4159,
                        "id": 4178,
                        "nodeType": "Return",
                        "src": "64809:77:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4153,
                        "src": "65036:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4181,
                      "name": "_reduceReservesFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294,
                      "src": "65015:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) returns (uint256)"
                      }
                    },
                    "id": 4183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "65015:34:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4159,
                  "id": 4184,
                  "nodeType": "Return",
                  "src": "65008:41:2"
                }
              ]
            },
            "documentation": "@notice Accrues interest and reduces reserves by transferring to admin\n@param reduceAmount Amount of reduction to reserves\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4186,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4156,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4155,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5850,
                  "src": "64537:12:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "64537:12:2"
              }
            ],
            "name": "_reduceReserves",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4153,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4186,
                  "src": "64506:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "64506:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "64505:22:2"
            },
            "returnParameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4158,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4186,
                  "src": "64559:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "64559:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "64558:9:2"
            },
            "scope": 4422,
            "src": "64481:575:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4293,
              "nodeType": "Block",
              "src": "65404:1948:2",
              "statements": [
                {
                  "assignments": [
                    4194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4194,
                      "name": "err",
                      "nodeType": "VariableDeclaration",
                      "scope": 4293,
                      "src": "65414:9:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4193,
                        "name": "Error",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5069,
                        "src": "65414:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "65414:9:2"
                },
                {
                  "assignments": [
                    4197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4197,
                      "name": "totalReservesNew",
                      "nodeType": "VariableDeclaration",
                      "scope": 4293,
                      "src": "65473:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4196,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "65473:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4198,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "65473:24:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4199,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "65545:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4200,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "65545:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4201,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "65559:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "65545:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4211,
                  "nodeType": "IfStatement",
                  "src": "65541:122:2",
                  "trueBody": {
                    "id": 4210,
                    "nodeType": "Block",
                    "src": "65566:97:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4204,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "65592:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65592:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4206,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "65612:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_ADMIN_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65612:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4203,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "65587:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "65587:65:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4209,
                        "nodeType": "Return",
                        "src": "65580:72:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4212,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "65764:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4213,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "65786:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "65786:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "65764:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4224,
                  "nodeType": "IfStatement",
                  "src": "65760:197:2",
                  "trueBody": {
                    "id": 4223,
                    "nodeType": "Block",
                    "src": "65804:153:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4217,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "65882:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65882:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4219,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "65906:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "65906:39:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4216,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "65877:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "65877:69:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4222,
                        "nodeType": "Return",
                        "src": "65870:76:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4225,
                        "name": "getCashPrior",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4394,
                        "src": "66043:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "66043:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4227,
                      "name": "reduceAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4188,
                      "src": "66060:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66043:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4237,
                  "nodeType": "IfStatement",
                  "src": "66039:150:2",
                  "trueBody": {
                    "id": 4236,
                    "nodeType": "Block",
                    "src": "66074:115:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4230,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "66100:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "TOKEN_INSUFFICIENT_CASH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66100:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4232,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "66131:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4233,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_CASH_NOT_AVAILABLE",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66131:46:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4229,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "66095:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "66095:83:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4235,
                        "nodeType": "Return",
                        "src": "66088:90:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4238,
                      "name": "reduceAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4188,
                      "src": "66419:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4239,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "66434:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66419:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4249,
                  "nodeType": "IfStatement",
                  "src": "66415:127:2",
                  "trueBody": {
                    "id": 4248,
                    "nodeType": "Block",
                    "src": "66449:93:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4242,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "66475:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "BAD_INPUT",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66475:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4244,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "66492:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "REDUCE_RESERVES_VALIDATION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "66492:38:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4241,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "66470:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "66470:61:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4192,
                        "id": 4247,
                        "nodeType": "Return",
                        "src": "66463:68:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4250,
                      "name": "totalReservesNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "66669:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4251,
                        "name": "totalReserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 751,
                        "src": "66688:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4252,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4188,
                        "src": "66704:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "66688:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66669:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4255,
                  "nodeType": "ExpressionStatement",
                  "src": "66669:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4257,
                          "name": "totalReservesNew",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4197,
                          "src": "66822:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4258,
                          "name": "totalReserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 751,
                          "src": "66842:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "66822:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "72656475636520726573657276657320756e657870656374656420756e646572666c6f77",
                        "id": 4260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "66857:38:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eb43be357f02f888aece778e1a59d1657b49201e44ced42f483132b975f83f50",
                          "typeString": "literal_string \"reduce reserves unexpected underflow\""
                        },
                        "value": "reduce reserves unexpected underflow"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eb43be357f02f888aece778e1a59d1657b49201e44ced42f483132b975f83f50",
                          "typeString": "literal_string \"reduce reserves unexpected underflow\""
                        }
                      ],
                      "id": 4256,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "66814:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "66814:82:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4262,
                  "nodeType": "ExpressionStatement",
                  "src": "66814:82:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4263,
                      "name": "totalReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 751,
                      "src": "66967:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4264,
                      "name": "totalReservesNew",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4197,
                      "src": "66983:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "66967:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4266,
                  "nodeType": "ExpressionStatement",
                  "src": "66967:32:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4267,
                      "name": "err",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4194,
                      "src": "67063:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4269,
                          "name": "admin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 733,
                          "src": "67083:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4270,
                          "name": "reduceAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4188,
                          "src": "67090:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4268,
                        "name": "doTransferOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4421,
                        "src": "67069:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$_t_enum$_Error_$5069_$",
                          "typeString": "function (address payable,uint256) returns (enum TokenErrorReporter.Error)"
                        }
                      },
                      "id": 4271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "67069:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Error_$5069",
                        "typeString": "enum TokenErrorReporter.Error"
                      }
                    },
                    "src": "67063:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "id": 4273,
                  "nodeType": "ExpressionStatement",
                  "src": "67063:40:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        },
                        "id": 4278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4275,
                          "name": "err",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4194,
                          "src": "67173:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4276,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "67180:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "67180:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        },
                        "src": "67173:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726564756365207265736572766573207472616e73666572206f7574206661696c6564",
                        "id": 4279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "67196:37:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3cfd2a2d85e9158620b2ecee5a64d70d1273f35b6fd1d4da1728bd0d5befd3f2",
                          "typeString": "literal_string \"reduce reserves transfer out failed\""
                        },
                        "value": "reduce reserves transfer out failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3cfd2a2d85e9158620b2ecee5a64d70d1273f35b6fd1d4da1728bd0d5befd3f2",
                          "typeString": "literal_string \"reduce reserves transfer out failed\""
                        }
                      ],
                      "id": 4274,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "67165:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67165:69:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4281,
                  "nodeType": "ExpressionStatement",
                  "src": "67165:69:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4283,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 733,
                        "src": "67266:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4284,
                        "name": "reduceAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4188,
                        "src": "67273:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4285,
                        "name": "totalReservesNew",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4197,
                        "src": "67287:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4282,
                      "name": "ReservesReduced",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 868,
                      "src": "67250:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67250:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4287,
                  "nodeType": "EmitStatement",
                  "src": "67245:59:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "67330:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "67330:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "67322:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67322:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4192,
                  "id": 4292,
                  "nodeType": "Return",
                  "src": "67315:30:2"
                }
              ]
            },
            "documentation": "@notice Reduces reserves by transferring to admin\n@dev Requires fresh interest accrual\n@param reduceAmount Amount of reduction to reserves\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_reduceReservesFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4188,
                  "name": "reduceAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "65355:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4187,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "65355:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "65354:22:2"
            },
            "returnParameters": {
              "id": 4192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4191,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4294,
                  "src": "65395:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "65395:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "65394:9:2"
            },
            "scope": 4422,
            "src": "65325:2027:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4326,
              "nodeType": "Block",
              "src": "67809:538:2",
              "statements": [
                {
                  "assignments": [
                    4302
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4302,
                      "name": "error",
                      "nodeType": "VariableDeclaration",
                      "scope": 4326,
                      "src": "67819:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4301,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "67819:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4305,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4303,
                      "name": "accrueInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2113,
                      "src": "67835:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () returns (uint256)"
                      }
                    },
                    "id": 4304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "67835:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "67819:32:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4306,
                      "name": "error",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4302,
                      "src": "67865:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4308,
                            "name": "Error",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5069,
                            "src": "67882:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                              "typeString": "type(enum TokenErrorReporter.Error)"
                            }
                          },
                          "id": 4309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "NO_ERROR",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "67882:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_Error_$5069",
                            "typeString": "enum TokenErrorReporter.Error"
                          }
                        ],
                        "id": 4307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "67874:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint256"
                      },
                      "id": 4310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "67874:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "67865:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4321,
                  "nodeType": "IfStatement",
                  "src": "67861:298:2",
                  "trueBody": {
                    "id": 4320,
                    "nodeType": "Block",
                    "src": "67899:260:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4314,
                                  "name": "error",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4302,
                                  "src": "68081:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4313,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "68075:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4315,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "68075:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4316,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "68089:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "68089:58:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4312,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "68070:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "68070:78:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4300,
                        "id": 4319,
                        "nodeType": "Return",
                        "src": "68063:85:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4323,
                        "name": "newInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4296,
                        "src": "68319:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      ],
                      "id": 4322,
                      "name": "_setInterestRateModelFresh",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4389,
                      "src": "68292:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_InterestRateModel_$5819_$returns$_t_uint256_$",
                        "typeString": "function (contract InterestRateModel) returns (uint256)"
                      }
                    },
                    "id": 4324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "68292:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4300,
                  "id": 4325,
                  "nodeType": "Return",
                  "src": "68285:55:2"
                }
              ]
            },
            "documentation": "@notice accrues interest and updates the interest rate model using _setInterestRateModelFresh\n@dev Admin function to accrue interest and update the interest rate model\n@param newInterestRateModel the new interest rate model to use\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4327,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestRateModel",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4296,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4327,
                  "src": "67744:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4295,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "67744:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "67743:40:2"
            },
            "returnParameters": {
              "id": 4300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4299,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4327,
                  "src": "67800:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4298,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "67800:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "67799:9:2"
            },
            "scope": 4422,
            "src": "67713:634:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4388,
              "nodeType": "Block",
              "src": "68772:1225:2",
              "statements": [
                {
                  "assignments": [
                    4335
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4335,
                      "name": "oldInterestRateModel",
                      "nodeType": "VariableDeclaration",
                      "scope": 4388,
                      "src": "68865:38:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4334,
                        "name": "InterestRateModel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 5819,
                        "src": "68865:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4336,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "68865:38:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4337,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11485,
                        "src": "68951:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "68951:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4339,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 733,
                      "src": "68965:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "68951:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4349,
                  "nodeType": "IfStatement",
                  "src": "68947:130:2",
                  "trueBody": {
                    "id": 4348,
                    "nodeType": "Block",
                    "src": "68972:105:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4342,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "68998:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "UNAUTHORIZED",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "68998:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4344,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "69018:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_OWNER_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69018:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4341,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "68993:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "68993:73:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4333,
                        "id": 4347,
                        "nodeType": "Return",
                        "src": "68986:80:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4350,
                      "name": "accrualBlockNumber",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 745,
                      "src": "69178:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4351,
                        "name": "getBlockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "69200:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 4352,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "69200:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "69178:38:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4362,
                  "nodeType": "IfStatement",
                  "src": "69174:205:2",
                  "trueBody": {
                    "id": 4361,
                    "nodeType": "Block",
                    "src": "69218:161:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4355,
                                "name": "Error",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5069,
                                "src": "69296:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                                  "typeString": "type(enum TokenErrorReporter.Error)"
                                }
                              },
                              "id": 4356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "MARKET_NOT_FRESH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69296:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4357,
                                "name": "FailureInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5148,
                                "src": "69320:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FailureInfo_$5148_$",
                                  "typeString": "type(enum TokenErrorReporter.FailureInfo)"
                                }
                              },
                              "id": 4358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "SET_INTEREST_RATE_MODEL_FRESH_CHECK",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "69320:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Error_$5069",
                                "typeString": "enum TokenErrorReporter.Error"
                              },
                              {
                                "typeIdentifier": "t_enum$_FailureInfo_$5148",
                                "typeString": "enum TokenErrorReporter.FailureInfo"
                              }
                            ],
                            "id": 4354,
                            "name": "fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "69291:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_Error_$5069_$_t_enum$_FailureInfo_$5148_$returns$_t_uint256_$",
                              "typeString": "function (enum TokenErrorReporter.Error,enum TokenErrorReporter.FailureInfo) returns (uint256)"
                            }
                          },
                          "id": 4359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "69291:77:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4333,
                        "id": 4360,
                        "nodeType": "Return",
                        "src": "69284:84:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4363,
                      "name": "oldInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4335,
                      "src": "69447:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4364,
                      "name": "interestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "69470:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "src": "69447:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "id": 4366,
                  "nodeType": "ExpressionStatement",
                  "src": "69447:40:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4368,
                            "name": "newInterestRateModel",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4329,
                            "src": "69587:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                              "typeString": "contract InterestRateModel"
                            }
                          },
                          "id": 4369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isInterestRateModel",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5818,
                          "src": "69587:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                            "typeString": "function () view external returns (bool)"
                          }
                        },
                        "id": 4370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "69587:42:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6d61726b6572206d6574686f642072657475726e65642066616c7365",
                        "id": 4371,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "69631:30:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        },
                        "value": "marker method returned false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_73c0b9b9fc59551809f9e3f686bb994cac13db80a83fd9ccdfe6d53da80fe637",
                          "typeString": "literal_string \"marker method returned false\""
                        }
                      ],
                      "id": 4367,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        11488,
                        11489
                      ],
                      "referencedDeclaration": 11489,
                      "src": "69579:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69579:83:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4373,
                  "nodeType": "ExpressionStatement",
                  "src": "69579:83:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4374,
                      "name": "interestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 739,
                      "src": "69736:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4375,
                      "name": "newInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4329,
                      "src": "69756:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                        "typeString": "contract InterestRateModel"
                      }
                    },
                    "src": "69736:40:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "id": 4377,
                  "nodeType": "ExpressionStatement",
                  "src": "69736:40:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4379,
                        "name": "oldInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4335,
                        "src": "69906:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4380,
                        "name": "newInterestRateModel",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4329,
                        "src": "69928:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        },
                        {
                          "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                          "typeString": "contract InterestRateModel"
                        }
                      ],
                      "id": 4378,
                      "name": "NewMarketInterestRateModel",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 854,
                      "src": "69879:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_InterestRateModel_$5819_$_t_contract$_InterestRateModel_$5819_$returns$__$",
                        "typeString": "function (contract InterestRateModel,contract InterestRateModel)"
                      }
                    },
                    "id": 4381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69879:70:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4382,
                  "nodeType": "EmitStatement",
                  "src": "69874:75:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4384,
                          "name": "Error",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5069,
                          "src": "69975:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Error_$5069_$",
                            "typeString": "type(enum TokenErrorReporter.Error)"
                          }
                        },
                        "id": 4385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "NO_ERROR",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "69975:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 4383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "69967:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 4386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "69967:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4333,
                  "id": 4387,
                  "nodeType": "Return",
                  "src": "69960:30:2"
                }
              ]
            },
            "documentation": "@notice updates the interest rate model (*requires fresh interest accrual)\n@dev Admin function to update the interest rate model\n@param newInterestRateModel the new interest rate model to use\n@return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)",
            "id": 4389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setInterestRateModelFresh",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4329,
                  "name": "newInterestRateModel",
                  "nodeType": "VariableDeclaration",
                  "scope": 4389,
                  "src": "68705:38:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                    "typeString": "contract InterestRateModel"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4328,
                    "name": "InterestRateModel",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5819,
                    "src": "68705:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_InterestRateModel_$5819",
                      "typeString": "contract InterestRateModel"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "68704:40:2"
            },
            "returnParameters": {
              "id": 4333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4332,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4389,
                  "src": "68763:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4331,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "68763:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "68762:9:2"
            },
            "scope": 4422,
            "src": "68669:1328:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@notice Gets balance of this contract in terms of the underlying\n@dev This excludes the value of the current message, if any\n@return The quantity of underlying owned by this contract",
            "id": 4394,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getCashPrior",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "70270:2:2"
            },
            "returnParameters": {
              "id": 4393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4392,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4394,
                  "src": "70296:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "70296:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70295:9:2"
            },
            "scope": 4422,
            "src": "70249:56:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Checks whether or not there is sufficient allowance for this contract to move amount from `from` and\n     whether or not `from` has a balance of at least `amount`. Does NOT do a transfer.",
            "id": 4403,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4396,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70559:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "70559:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4398,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70573:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "70573:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70558:30:2"
            },
            "returnParameters": {
              "id": 4402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4401,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4403,
                  "src": "70612:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4400,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "70612:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "70611:7:2"
            },
            "scope": 4422,
            "src": "70534:85:2",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Performs a transfer in, ideally returning an explanatory error code upon failure rather than reverting.\n If caller has not called `checkTransferIn`, this may revert due to insufficient balance or insufficient allowance.\n If caller has called `checkTransferIn` successfully, this should not revert in normal conditions.",
            "id": 4412,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferIn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4408,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4405,
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71008:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4404,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "71008:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4407,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71022:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4406,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "71022:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71007:30:2"
            },
            "returnParameters": {
              "id": 4411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4410,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "71056:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4409,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "71056:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71055:7:2"
            },
            "scope": 4422,
            "src": "70986:77:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": null,
            "documentation": "@dev Performs a transfer out, ideally returning an explanatory error code upon failure tather than reverting.\n If caller has not called checked protocol's balance, may revert due to insufficient cash held in the contract.\n If caller has checked protocol's balance, and verified it is >= amount, this should not revert in normal conditions.",
            "id": 4421,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doTransferOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4414,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71469:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4413,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "71469:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4416,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71489:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "71489:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71468:36:2"
            },
            "returnParameters": {
              "id": 4420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4419,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4421,
                  "src": "71523:5:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4418,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "71523:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "71522:7:2"
            },
            "scope": 4422,
            "src": "71446:84:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4423,
        "src": "320:71212:2"
      }
    ],
    "src": "0:71533:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.454Z",
  "devdoc": {
    "author": "Compound",
    "methods": {
      "_acceptAdmin()": {
        "details": "Admin function for pending admin to accept role and update admin",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_reduceReserves(uint256)": {
        "params": {
          "reduceAmount": "Amount of reduction to reserves"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setComptroller(address)": {
        "details": "Admin function to set a new comptroller",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setInterestRateModel(address)": {
        "details": "Admin function to accrue interest and update the interest rate model",
        "params": {
          "newInterestRateModel": "the new interest rate model to use"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "_setPendingAdmin(address)": {
        "details": "Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.",
        "params": {
          "newPendingAdmin": "New pending admin."
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)      * TODO: Should we add a second arg to verify, like a checksum of `newAdmin` address?"
      },
      "_setReserveFactor(uint256)": {
        "details": "Admin function to accrue interest and set a new reserve factor",
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "accrueInterest()": {
        "details": "This calculates interest accrued from the last checkpointed block     up to the current block and writes new checkpoint to storage."
      },
      "allowance(address,address)": {
        "params": {
          "owner": "The address of the account which owns the tokens to be spent",
          "spender": "The address of the account which may transfer tokens"
        },
        "return": "The number of tokens allowed to be spent (-1 means infinite)"
      },
      "approve(address,uint256)": {
        "details": "This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)",
        "params": {
          "amount": "The number of tokens that are approved (-1 means infinite)",
          "spender": "The address of the account which may transfer tokens"
        },
        "return": "Whether or not the approval succeeded"
      },
      "balanceOf(address)": {
        "params": {
          "owner": "The address of the account to query"
        },
        "return": "The number of tokens owned by `owner`"
      },
      "balanceOfUnderlying(address)": {
        "details": "This also accrues interest in a transaction",
        "params": {
          "owner": "The address of the account to query"
        },
        "return": "The amount of underlying owned by `owner`"
      },
      "borrowBalanceCurrent(address)": {
        "params": {
          "account": "The address whose balance should be calculated after updating borrowIndex"
        },
        "return": "The calculated balance"
      },
      "borrowBalanceStored(address)": {
        "params": {
          "account": "The address whose balance should be calculated"
        },
        "return": "The calculated balance"
      },
      "borrowRatePerBlock()": {
        "return": "The borrow interest rate per block, scaled by 1e18"
      },
      "constructor": {
        "params": {
          "comptroller_": "The address of the Comptroller",
          "decimals_": "EIP-20 decimal precision of this token",
          "initialExchangeRateMantissa_": "The initial exchange rate, scaled by 1e18",
          "interestRateModel_": "The address of the interest rate model",
          "name_": "EIP-20 name of this token",
          "symbol_": "EIP-20 symbol of this token"
        }
      },
      "exchangeRateCurrent()": {
        "return": "Calculated exchange rate scaled by 1e18"
      },
      "exchangeRateStored()": {
        "details": "This function does not accrue interest before calculating the exchange rate",
        "return": "Calculated exchange rate scaled by 1e18"
      },
      "getAccountSnapshot(address)": {
        "details": "This is used by comptroller to more efficiently perform liquidity checks.",
        "params": {
          "account": "Address of the account to snapshot"
        },
        "return": "(possible error, token balance, borrow balance, exchange rate mantissa)"
      },
      "getCash()": {
        "return": "The quantity of underlying asset owned by this contract"
      },
      "seize(address,address,uint256)": {
        "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.",
        "params": {
          "borrower": "The account having collateral seized",
          "liquidator": "The account receiving seized collateral",
          "seizeTokens": "The number of cTokens to seize"
        },
        "return": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)"
      },
      "supplyRatePerBlock()": {
        "return": "The supply interest rate per block, scaled by 1e18"
      },
      "totalBorrowsCurrent()": {
        "return": "The total borrows with interest"
      },
      "transfer(address,uint256)": {
        "params": {
          "amount": "The number of tokens to transfer",
          "dst": "The address of the destination account"
        },
        "return": "Whether or not the transfer succeeded"
      },
      "transferFrom(address,address,uint256)": {
        "params": {
          "amount": "The number of tokens to transfer",
          "dst": "The address of the destination account",
          "src": "The address of the source account"
        },
        "return": "Whether or not the transfer succeeded"
      }
    },
    "title": "Compound's CToken Contract"
  },
  "userdoc": {
    "methods": {
      "_acceptAdmin()": {
        "notice": "Accepts transfer of admin rights. msg.sender must be pendingAdmin"
      },
      "_reduceReserves(uint256)": {
        "notice": "Accrues interest and reduces reserves by transferring to admin"
      },
      "_setComptroller(address)": {
        "notice": "Sets a new comptroller for the market"
      },
      "_setInterestRateModel(address)": {
        "notice": "accrues interest and updates the interest rate model using _setInterestRateModelFresh"
      },
      "_setPendingAdmin(address)": {
        "notice": "Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer."
      },
      "_setReserveFactor(uint256)": {
        "notice": "accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh"
      },
      "accrueInterest()": {
        "notice": "Applies accrued interest to total borrows and reserves."
      },
      "allowance(address,address)": {
        "notice": "Get the current allowance from `owner` for `spender`"
      },
      "approve(address,uint256)": {
        "notice": "Approve `spender` to transfer up to `amount` from `src`"
      },
      "balanceOf(address)": {
        "notice": "Get the token balance of the `owner`"
      },
      "balanceOfUnderlying(address)": {
        "notice": "Get the underlying balance of the `owner`"
      },
      "borrowBalanceCurrent(address)": {
        "notice": "Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex"
      },
      "borrowBalanceStored(address)": {
        "notice": "Return the borrow balance of account based on stored data"
      },
      "borrowRatePerBlock()": {
        "notice": "Returns the current per-block borrow interest rate for this cToken"
      },
      "constructor": "Construct a new money market",
      "exchangeRateCurrent()": {
        "notice": "Accrue interest then return the up-to-date exchange rate"
      },
      "exchangeRateStored()": {
        "notice": "Calculates the exchange rate from the underlying to the CToken"
      },
      "getAccountSnapshot(address)": {
        "notice": "Get a snapshot of the account's balances, and the cached exchange rate"
      },
      "getCash()": {
        "notice": "Get cash balance of this cToken in the underlying asset"
      },
      "seize(address,address,uint256)": {
        "notice": "Transfers collateral tokens (this market) to the liquidator."
      },
      "supplyRatePerBlock()": {
        "notice": "Returns the current per-block supply interest rate for this cToken"
      },
      "totalBorrowsCurrent()": {
        "notice": "Returns the current total borrows plus accrued interest"
      },
      "transfer(address,uint256)": {
        "notice": "Transfer `amount` tokens from `msg.sender` to `dst`"
      },
      "transferFrom(address,address,uint256)": {
        "notice": "Transfer `amount` tokens from `src` to `dst`"
      }
    },
    "notice": "Abstract base for CTokens"
  }
}