{
  "contractName": "TokenErrorReporter",
  "abi": [
    {
      "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.12+commit.7709ece9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol\":\"TokenErrorReporter\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol\":{\"keccak256\":\"0x3f0cb233287ad13e45a46b4fa63dbad2c63a17d0647049c04f487bf3c71c8cac\",\"urls\":[\"bzz-raw://b6b34d0f897d0a2917d2e6567e95a21bd7e0b25adc172c431c40fdae96cc5504\",\"dweb:/ipfs/QmV32L6X3fHz6kFgS5VQkm24cZxre4jMEdexjLZ6DVCgCi\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a72315820cc9f7bafd8e7968e266881d049d6acffb8f42eb4b4aafdf3f6b3d629ab05965f64736f6c634300050c0032",
  "deployedBytecode": "0x6080604052600080fdfea265627a7a72315820cc9f7bafd8e7968e266881d049d6acffb8f42eb4b4aafdf3f6b3d629ab05965f64736f6c634300050c0032",
  "sourceMap": "2299:5286:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2299:5286:7;;;;;;;",
  "deployedSourceMap": "2299:5286:7:-;;;;;",
  "source": "pragma solidity ^0.5.8;\n\ncontract ComptrollerErrorReporter {\n    enum Error {\n        NO_ERROR,\n        UNAUTHORIZED,\n        COMPTROLLER_MISMATCH,\n        INSUFFICIENT_SHORTFALL,\n        INSUFFICIENT_LIQUIDITY,\n        INVALID_CLOSE_FACTOR,\n        INVALID_COLLATERAL_FACTOR,\n        INVALID_LIQUIDATION_INCENTIVE,\n        MARKET_NOT_ENTERED,\n        MARKET_NOT_LISTED,\n        MARKET_ALREADY_LISTED,\n        MATH_ERROR,\n        NONZERO_BORROW_BALANCE,\n        PRICE_ERROR,\n        REJECTION,\n        SNAPSHOT_ERROR,\n        TOO_MANY_ASSETS,\n        TOO_MUCH_REPAY\n    }\n\n    enum FailureInfo {\n        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,\n        ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,\n        EXIT_MARKET_BALANCE_OWED,\n        EXIT_MARKET_REJECTION,\n        SET_CLOSE_FACTOR_OWNER_CHECK,\n        SET_CLOSE_FACTOR_VALIDATION,\n        SET_COLLATERAL_FACTOR_OWNER_CHECK,\n        SET_COLLATERAL_FACTOR_NO_EXISTS,\n        SET_COLLATERAL_FACTOR_VALIDATION,\n        SET_COLLATERAL_FACTOR_WITHOUT_PRICE,\n        SET_IMPLEMENTATION_OWNER_CHECK,\n        SET_LIQUIDATION_INCENTIVE_OWNER_CHECK,\n        SET_LIQUIDATION_INCENTIVE_VALIDATION,\n        SET_MAX_ASSETS_OWNER_CHECK,\n        SET_PENDING_ADMIN_OWNER_CHECK,\n        SET_PENDING_IMPLEMENTATION_OWNER_CHECK,\n        SET_PRICE_ORACLE_OWNER_CHECK,\n        SUPPORT_MARKET_EXISTS,\n        SUPPORT_MARKET_OWNER_CHECK,\n        ZUNUSED\n    }\n\n    /**\n      * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\n      * contract-specific code that enables us to report opaque error codes from upgradeable contracts.\n      **/\n    event Failure(uint256 error, uint256 info, uint256 detail);\n\n    /**\n      * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator\n      */\n    function fail(Error err, FailureInfo info) internal returns (uint256) {\n        emit Failure(uint256(err), uint256(info), 0);\n\n        return uint256(err);\n    }\n\n    /**\n      * @dev use this when reporting an opaque error from an upgradeable collaborator contract\n      */\n    function failOpaque(Error err, FailureInfo info, uint256 opaqueError) internal returns (uint256) {\n        emit Failure(uint256(err), uint256(info), opaqueError);\n\n        return uint256(err);\n    }\n}\n\ncontract TokenErrorReporter {\n    enum Error {\n        NO_ERROR,\n        UNAUTHORIZED,\n        BAD_INPUT,\n        COMPTROLLER_REJECTION,\n        COMPTROLLER_CALCULATION_ERROR,\n        INTEREST_RATE_MODEL_ERROR,\n        INVALID_ACCOUNT_PAIR,\n        INVALID_CLOSE_AMOUNT_REQUESTED,\n        INVALID_COLLATERAL_FACTOR,\n        MATH_ERROR,\n        MARKET_NOT_FRESH,\n        MARKET_NOT_LISTED,\n        TOKEN_INSUFFICIENT_ALLOWANCE,\n        TOKEN_INSUFFICIENT_BALANCE,\n        TOKEN_INSUFFICIENT_CASH,\n        TOKEN_TRANSFER_IN_FAILED,\n        TOKEN_TRANSFER_OUT_FAILED\n    }\n\n    /*\n     * Note: FailureInfo (but not Error) is kept in alphabetical order\n     *       This is because FailureInfo grows significantly faster, and\n     *       the order of Error has some meaning, while the order of FailureInfo\n     *       is entirely arbitrary.\n     */\n    enum FailureInfo {\n        ACCEPT_ADMIN_PENDING_ADMIN_CHECK,\n        ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED,\n        ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED,\n        ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED,\n        ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED,\n        ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED,\n        ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED,\n        BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,\n        BORROW_ACCRUE_INTEREST_FAILED,\n        BORROW_CASH_NOT_AVAILABLE,\n        BORROW_FRESHNESS_CHECK,\n        BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,\n        BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,\n        BORROW_MARKET_NOT_LISTED,\n        BORROW_COMPTROLLER_REJECTION,\n        LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED,\n        LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED,\n        LIQUIDATE_COLLATERAL_FRESHNESS_CHECK,\n        LIQUIDATE_COMPTROLLER_REJECTION,\n        LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED,\n        LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX,\n        LIQUIDATE_CLOSE_AMOUNT_IS_ZERO,\n        LIQUIDATE_FRESHNESS_CHECK,\n        LIQUIDATE_LIQUIDATOR_IS_BORROWER,\n        LIQUIDATE_REPAY_BORROW_FRESH_FAILED,\n        LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED,\n        LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED,\n        LIQUIDATE_SEIZE_COMPTROLLER_REJECTION,\n        LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER,\n        LIQUIDATE_SEIZE_TOO_MUCH,\n        MINT_ACCRUE_INTEREST_FAILED,\n        MINT_COMPTROLLER_REJECTION,\n        MINT_EXCHANGE_CALCULATION_FAILED,\n        MINT_EXCHANGE_RATE_READ_FAILED,\n        MINT_FRESHNESS_CHECK,\n        MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,\n        MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,\n        MINT_TRANSFER_IN_FAILED,\n        MINT_TRANSFER_IN_NOT_POSSIBLE,\n        REDEEM_ACCRUE_INTEREST_FAILED,\n        REDEEM_COMPTROLLER_REJECTION,\n        REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED,\n        REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED,\n        REDEEM_EXCHANGE_RATE_READ_FAILED,\n        REDEEM_FRESHNESS_CHECK,\n        REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED,\n        REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED,\n        REDEEM_TRANSFER_OUT_NOT_POSSIBLE,\n        REDUCE_RESERVES_ACCRUE_INTEREST_FAILED,\n        REDUCE_RESERVES_ADMIN_CHECK,\n        REDUCE_RESERVES_CASH_NOT_AVAILABLE,\n        REDUCE_RESERVES_FRESH_CHECK,\n        REDUCE_RESERVES_VALIDATION,\n        REPAY_BEHALF_ACCRUE_INTEREST_FAILED,\n        REPAY_BORROW_ACCRUE_INTEREST_FAILED,\n        REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED,\n        REPAY_BORROW_COMPTROLLER_REJECTION,\n        REPAY_BORROW_FRESHNESS_CHECK,\n        REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED,\n        REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED,\n        REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE,\n        SET_COLLATERAL_FACTOR_OWNER_CHECK,\n        SET_COLLATERAL_FACTOR_VALIDATION,\n        SET_COMPTROLLER_OWNER_CHECK,\n        SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED,\n        SET_INTEREST_RATE_MODEL_FRESH_CHECK,\n        SET_INTEREST_RATE_MODEL_OWNER_CHECK,\n        SET_MAX_ASSETS_OWNER_CHECK,\n        SET_ORACLE_MARKET_NOT_LISTED,\n        SET_PENDING_ADMIN_OWNER_CHECK,\n        SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED,\n        SET_RESERVE_FACTOR_ADMIN_CHECK,\n        SET_RESERVE_FACTOR_FRESH_CHECK,\n        SET_RESERVE_FACTOR_BOUNDS_CHECK,\n        TRANSFER_COMPTROLLER_REJECTION,\n        TRANSFER_NOT_ALLOWED,\n        TRANSFER_NOT_ENOUGH,\n        TRANSFER_TOO_MUCH\n    }\n\n    /**\n      * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\n      * contract-specific code that enables us to report opaque error codes from upgradeable contracts.\n      **/\n    event Failure(uint256 error, uint256 info, uint256 detail);\n\n    /**\n      * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator\n      */\n    function fail(Error err, FailureInfo info) internal returns (uint256) {\n        emit Failure(uint256(err), uint256(info), 0);\n\n        return uint256(err);\n    }\n\n    /**\n      * @dev use this when reporting an opaque error from an upgradeable collaborator contract\n      */\n    function failOpaque(Error err, FailureInfo info, uint256 opaqueError) internal returns (uint256) {\n        emit Failure(uint256(err), uint256(info), opaqueError);\n\n        return uint256(err);\n    }\n}\n",
  "sourcePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol",
  "ast": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol",
    "exportedSymbols": {
      "ComptrollerErrorReporter": [
        5051
      ],
      "TokenErrorReporter": [
        5207
      ]
    },
    "id": 5208,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4952,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5051,
        "linearizedBaseContracts": [
          5051
        ],
        "name": "ComptrollerErrorReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ComptrollerErrorReporter.Error",
            "id": 4971,
            "members": [
              {
                "id": 4953,
                "name": "NO_ERROR",
                "nodeType": "EnumValue",
                "src": "86:8:7"
              },
              {
                "id": 4954,
                "name": "UNAUTHORIZED",
                "nodeType": "EnumValue",
                "src": "104:12:7"
              },
              {
                "id": 4955,
                "name": "COMPTROLLER_MISMATCH",
                "nodeType": "EnumValue",
                "src": "126:20:7"
              },
              {
                "id": 4956,
                "name": "INSUFFICIENT_SHORTFALL",
                "nodeType": "EnumValue",
                "src": "156:22:7"
              },
              {
                "id": 4957,
                "name": "INSUFFICIENT_LIQUIDITY",
                "nodeType": "EnumValue",
                "src": "188:22:7"
              },
              {
                "id": 4958,
                "name": "INVALID_CLOSE_FACTOR",
                "nodeType": "EnumValue",
                "src": "220:20:7"
              },
              {
                "id": 4959,
                "name": "INVALID_COLLATERAL_FACTOR",
                "nodeType": "EnumValue",
                "src": "250:25:7"
              },
              {
                "id": 4960,
                "name": "INVALID_LIQUIDATION_INCENTIVE",
                "nodeType": "EnumValue",
                "src": "285:29:7"
              },
              {
                "id": 4961,
                "name": "MARKET_NOT_ENTERED",
                "nodeType": "EnumValue",
                "src": "324:18:7"
              },
              {
                "id": 4962,
                "name": "MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "352:17:7"
              },
              {
                "id": 4963,
                "name": "MARKET_ALREADY_LISTED",
                "nodeType": "EnumValue",
                "src": "379:21:7"
              },
              {
                "id": 4964,
                "name": "MATH_ERROR",
                "nodeType": "EnumValue",
                "src": "410:10:7"
              },
              {
                "id": 4965,
                "name": "NONZERO_BORROW_BALANCE",
                "nodeType": "EnumValue",
                "src": "430:22:7"
              },
              {
                "id": 4966,
                "name": "PRICE_ERROR",
                "nodeType": "EnumValue",
                "src": "462:11:7"
              },
              {
                "id": 4967,
                "name": "REJECTION",
                "nodeType": "EnumValue",
                "src": "483:9:7"
              },
              {
                "id": 4968,
                "name": "SNAPSHOT_ERROR",
                "nodeType": "EnumValue",
                "src": "502:14:7"
              },
              {
                "id": 4969,
                "name": "TOO_MANY_ASSETS",
                "nodeType": "EnumValue",
                "src": "526:15:7"
              },
              {
                "id": 4970,
                "name": "TOO_MUCH_REPAY",
                "nodeType": "EnumValue",
                "src": "551:14:7"
              }
            ],
            "name": "Error",
            "nodeType": "EnumDefinition",
            "src": "65:506:7"
          },
          {
            "canonicalName": "ComptrollerErrorReporter.FailureInfo",
            "id": 4992,
            "members": [
              {
                "id": 4972,
                "name": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "604:32:7"
              },
              {
                "id": 4973,
                "name": "ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK",
                "nodeType": "EnumValue",
                "src": "646:43:7"
              },
              {
                "id": 4974,
                "name": "EXIT_MARKET_BALANCE_OWED",
                "nodeType": "EnumValue",
                "src": "699:24:7"
              },
              {
                "id": 4975,
                "name": "EXIT_MARKET_REJECTION",
                "nodeType": "EnumValue",
                "src": "733:21:7"
              },
              {
                "id": 4976,
                "name": "SET_CLOSE_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "764:28:7"
              },
              {
                "id": 4977,
                "name": "SET_CLOSE_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "802:27:7"
              },
              {
                "id": 4978,
                "name": "SET_COLLATERAL_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "839:33:7"
              },
              {
                "id": 4979,
                "name": "SET_COLLATERAL_FACTOR_NO_EXISTS",
                "nodeType": "EnumValue",
                "src": "882:31:7"
              },
              {
                "id": 4980,
                "name": "SET_COLLATERAL_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "923:32:7"
              },
              {
                "id": 4981,
                "name": "SET_COLLATERAL_FACTOR_WITHOUT_PRICE",
                "nodeType": "EnumValue",
                "src": "965:35:7"
              },
              {
                "id": 4982,
                "name": "SET_IMPLEMENTATION_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1010:30:7"
              },
              {
                "id": 4983,
                "name": "SET_LIQUIDATION_INCENTIVE_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1050:37:7"
              },
              {
                "id": 4984,
                "name": "SET_LIQUIDATION_INCENTIVE_VALIDATION",
                "nodeType": "EnumValue",
                "src": "1097:36:7"
              },
              {
                "id": 4985,
                "name": "SET_MAX_ASSETS_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1143:26:7"
              },
              {
                "id": 4986,
                "name": "SET_PENDING_ADMIN_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1179:29:7"
              },
              {
                "id": 4987,
                "name": "SET_PENDING_IMPLEMENTATION_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1218:38:7"
              },
              {
                "id": 4988,
                "name": "SET_PRICE_ORACLE_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1266:28:7"
              },
              {
                "id": 4989,
                "name": "SUPPORT_MARKET_EXISTS",
                "nodeType": "EnumValue",
                "src": "1304:21:7"
              },
              {
                "id": 4990,
                "name": "SUPPORT_MARKET_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1335:26:7"
              },
              {
                "id": 4991,
                "name": "ZUNUSED",
                "nodeType": "EnumValue",
                "src": "1371:7:7"
              }
            ],
            "name": "FailureInfo",
            "nodeType": "EnumDefinition",
            "src": "577:807:7"
          },
          {
            "anonymous": false,
            "documentation": "@dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\ncontract-specific code that enables us to report opaque error codes from upgradeable contracts.*",
            "id": 5000,
            "name": "Failure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4994,
                  "indexed": false,
                  "name": "error",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1643:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4993,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4996,
                  "indexed": false,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1658:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1658:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4998,
                  "indexed": false,
                  "name": "detail",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1672:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4997,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1672:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1642:45:7"
            },
            "src": "1629:59:7"
          },
          {
            "body": {
              "id": 5023,
              "nodeType": "Block",
              "src": "1888:91:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5011,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5002,
                            "src": "1919:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          ],
                          "id": 5010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1911:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1911:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5014,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5004,
                            "src": "1933:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1925:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1925:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1940:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5009,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5000,
                      "src": "1903:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1903:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5018,
                  "nodeType": "EmitStatement",
                  "src": "1898:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5020,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5002,
                        "src": "1968:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      ],
                      "id": 5019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1960:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1960:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5008,
                  "id": 5022,
                  "nodeType": "Return",
                  "src": "1953:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting a known error from the money market or a non-upgradeable collaborator",
            "id": 5024,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5002,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1832:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$4971",
                    "typeString": "enum ComptrollerErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5001,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4971,
                    "src": "1832:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$4971",
                      "typeString": "enum ComptrollerErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5004,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1843:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$4992",
                    "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5003,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4992,
                    "src": "1843:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$4992",
                      "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1831:29:7"
            },
            "returnParameters": {
              "id": 5008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1879:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1879:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1878:9:7"
            },
            "scope": 5051,
            "src": "1818:161:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5049,
              "nodeType": "Block",
              "src": "2194:101:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5037,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5026,
                            "src": "2225:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          ],
                          "id": 5036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2217:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2217:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5040,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5028,
                            "src": "2239:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2231:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2231:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5042,
                        "name": "opaqueError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5030,
                        "src": "2246:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5035,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5000,
                      "src": "2209:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2209:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5044,
                  "nodeType": "EmitStatement",
                  "src": "2204:54:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5046,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5026,
                        "src": "2284:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      ],
                      "id": 5045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2276:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5034,
                  "id": 5048,
                  "nodeType": "Return",
                  "src": "2269:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting an opaque error from an upgradeable collaborator contract",
            "id": 5050,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "failOpaque",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5031,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5026,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2117:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$4971",
                    "typeString": "enum ComptrollerErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5025,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4971,
                    "src": "2117:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$4971",
                      "typeString": "enum ComptrollerErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5028,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2128:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$4992",
                    "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5027,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4992,
                    "src": "2128:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$4992",
                      "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5030,
                  "name": "opaqueError",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2146:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5029,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2146:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2116:50:7"
            },
            "returnParameters": {
              "id": 5034,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5033,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2185:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2185:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2184:9:7"
            },
            "scope": 5051,
            "src": "2097:198:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5208,
        "src": "25:2272:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5207,
        "linearizedBaseContracts": [
          5207
        ],
        "name": "TokenErrorReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "TokenErrorReporter.Error",
            "id": 5069,
            "members": [
              {
                "id": 5052,
                "name": "NO_ERROR",
                "nodeType": "EnumValue",
                "src": "2354:8:7"
              },
              {
                "id": 5053,
                "name": "UNAUTHORIZED",
                "nodeType": "EnumValue",
                "src": "2372:12:7"
              },
              {
                "id": 5054,
                "name": "BAD_INPUT",
                "nodeType": "EnumValue",
                "src": "2394:9:7"
              },
              {
                "id": 5055,
                "name": "COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "2413:21:7"
              },
              {
                "id": 5056,
                "name": "COMPTROLLER_CALCULATION_ERROR",
                "nodeType": "EnumValue",
                "src": "2444:29:7"
              },
              {
                "id": 5057,
                "name": "INTEREST_RATE_MODEL_ERROR",
                "nodeType": "EnumValue",
                "src": "2483:25:7"
              },
              {
                "id": 5058,
                "name": "INVALID_ACCOUNT_PAIR",
                "nodeType": "EnumValue",
                "src": "2518:20:7"
              },
              {
                "id": 5059,
                "name": "INVALID_CLOSE_AMOUNT_REQUESTED",
                "nodeType": "EnumValue",
                "src": "2548:30:7"
              },
              {
                "id": 5060,
                "name": "INVALID_COLLATERAL_FACTOR",
                "nodeType": "EnumValue",
                "src": "2588:25:7"
              },
              {
                "id": 5061,
                "name": "MATH_ERROR",
                "nodeType": "EnumValue",
                "src": "2623:10:7"
              },
              {
                "id": 5062,
                "name": "MARKET_NOT_FRESH",
                "nodeType": "EnumValue",
                "src": "2643:16:7"
              },
              {
                "id": 5063,
                "name": "MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "2669:17:7"
              },
              {
                "id": 5064,
                "name": "TOKEN_INSUFFICIENT_ALLOWANCE",
                "nodeType": "EnumValue",
                "src": "2696:28:7"
              },
              {
                "id": 5065,
                "name": "TOKEN_INSUFFICIENT_BALANCE",
                "nodeType": "EnumValue",
                "src": "2734:26:7"
              },
              {
                "id": 5066,
                "name": "TOKEN_INSUFFICIENT_CASH",
                "nodeType": "EnumValue",
                "src": "2770:23:7"
              },
              {
                "id": 5067,
                "name": "TOKEN_TRANSFER_IN_FAILED",
                "nodeType": "EnumValue",
                "src": "2803:24:7"
              },
              {
                "id": 5068,
                "name": "TOKEN_TRANSFER_OUT_FAILED",
                "nodeType": "EnumValue",
                "src": "2837:25:7"
              }
            ],
            "name": "Error",
            "nodeType": "EnumDefinition",
            "src": "2333:535:7"
          },
          {
            "canonicalName": "TokenErrorReporter.FailureInfo",
            "id": 5148,
            "members": [
              {
                "id": 5070,
                "name": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "3177:32:7"
              },
              {
                "id": 5071,
                "name": "ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3219:55:7"
              },
              {
                "id": 5072,
                "name": "ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3284:46:7"
              },
              {
                "id": 5073,
                "name": "ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3340:51:7"
              },
              {
                "id": 5074,
                "name": "ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3401:52:7"
              },
              {
                "id": 5075,
                "name": "ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3463:53:7"
              },
              {
                "id": 5076,
                "name": "ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3526:57:7"
              },
              {
                "id": 5077,
                "name": "BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3593:45:7"
              },
              {
                "id": 5078,
                "name": "BORROW_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3648:29:7"
              },
              {
                "id": 5079,
                "name": "BORROW_CASH_NOT_AVAILABLE",
                "nodeType": "EnumValue",
                "src": "3687:25:7"
              },
              {
                "id": 5080,
                "name": "BORROW_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "3722:22:7"
              },
              {
                "id": 5081,
                "name": "BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3754:43:7"
              },
              {
                "id": 5082,
                "name": "BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3807:52:7"
              },
              {
                "id": 5083,
                "name": "BORROW_MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "3869:24:7"
              },
              {
                "id": 5084,
                "name": "BORROW_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "3903:28:7"
              },
              {
                "id": 5085,
                "name": "LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3941:39:7"
              },
              {
                "id": 5086,
                "name": "LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3990:43:7"
              },
              {
                "id": 5087,
                "name": "LIQUIDATE_COLLATERAL_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4043:36:7"
              },
              {
                "id": 5088,
                "name": "LIQUIDATE_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4089:31:7"
              },
              {
                "id": 5089,
                "name": "LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED",
                "nodeType": "EnumValue",
                "src": "4130:51:7"
              },
              {
                "id": 5090,
                "name": "LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX",
                "nodeType": "EnumValue",
                "src": "4191:34:7"
              },
              {
                "id": 5091,
                "name": "LIQUIDATE_CLOSE_AMOUNT_IS_ZERO",
                "nodeType": "EnumValue",
                "src": "4235:30:7"
              },
              {
                "id": 5092,
                "name": "LIQUIDATE_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4275:25:7"
              },
              {
                "id": 5093,
                "name": "LIQUIDATE_LIQUIDATOR_IS_BORROWER",
                "nodeType": "EnumValue",
                "src": "4310:32:7"
              },
              {
                "id": 5094,
                "name": "LIQUIDATE_REPAY_BORROW_FRESH_FAILED",
                "nodeType": "EnumValue",
                "src": "4352:35:7"
              },
              {
                "id": 5095,
                "name": "LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED",
                "nodeType": "EnumValue",
                "src": "4397:40:7"
              },
              {
                "id": 5096,
                "name": "LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED",
                "nodeType": "EnumValue",
                "src": "4447:40:7"
              },
              {
                "id": 5097,
                "name": "LIQUIDATE_SEIZE_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4497:37:7"
              },
              {
                "id": 5098,
                "name": "LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER",
                "nodeType": "EnumValue",
                "src": "4544:38:7"
              },
              {
                "id": 5099,
                "name": "LIQUIDATE_SEIZE_TOO_MUCH",
                "nodeType": "EnumValue",
                "src": "4592:24:7"
              },
              {
                "id": 5100,
                "name": "MINT_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "4626:27:7"
              },
              {
                "id": 5101,
                "name": "MINT_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4663:26:7"
              },
              {
                "id": 5102,
                "name": "MINT_EXCHANGE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4699:32:7"
              },
              {
                "id": 5103,
                "name": "MINT_EXCHANGE_RATE_READ_FAILED",
                "nodeType": "EnumValue",
                "src": "4741:30:7"
              },
              {
                "id": 5104,
                "name": "MINT_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4781:20:7"
              },
              {
                "id": 5105,
                "name": "MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4811:43:7"
              },
              {
                "id": 5106,
                "name": "MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4864:40:7"
              },
              {
                "id": 5107,
                "name": "MINT_TRANSFER_IN_FAILED",
                "nodeType": "EnumValue",
                "src": "4914:23:7"
              },
              {
                "id": 5108,
                "name": "MINT_TRANSFER_IN_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "4947:29:7"
              },
              {
                "id": 5109,
                "name": "REDEEM_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "4986:29:7"
              },
              {
                "id": 5110,
                "name": "REDEEM_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "5025:28:7"
              },
              {
                "id": 5111,
                "name": "REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5063:41:7"
              },
              {
                "id": 5112,
                "name": "REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5114:41:7"
              },
              {
                "id": 5113,
                "name": "REDEEM_EXCHANGE_RATE_READ_FAILED",
                "nodeType": "EnumValue",
                "src": "5165:32:7"
              },
              {
                "id": 5114,
                "name": "REDEEM_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "5207:22:7"
              },
              {
                "id": 5115,
                "name": "REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5239:45:7"
              },
              {
                "id": 5116,
                "name": "REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5294:42:7"
              },
              {
                "id": 5117,
                "name": "REDEEM_TRANSFER_OUT_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "5346:32:7"
              },
              {
                "id": 5118,
                "name": "REDUCE_RESERVES_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5388:38:7"
              },
              {
                "id": 5119,
                "name": "REDUCE_RESERVES_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "5436:27:7"
              },
              {
                "id": 5120,
                "name": "REDUCE_RESERVES_CASH_NOT_AVAILABLE",
                "nodeType": "EnumValue",
                "src": "5473:34:7"
              },
              {
                "id": 5121,
                "name": "REDUCE_RESERVES_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "5517:27:7"
              },
              {
                "id": 5122,
                "name": "REDUCE_RESERVES_VALIDATION",
                "nodeType": "EnumValue",
                "src": "5554:26:7"
              },
              {
                "id": 5123,
                "name": "REPAY_BEHALF_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5590:35:7"
              },
              {
                "id": 5124,
                "name": "REPAY_BORROW_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5635:35:7"
              },
              {
                "id": 5125,
                "name": "REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5680:51:7"
              },
              {
                "id": 5126,
                "name": "REPAY_BORROW_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "5741:34:7"
              },
              {
                "id": 5127,
                "name": "REPAY_BORROW_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "5785:28:7"
              },
              {
                "id": 5128,
                "name": "REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5823:58:7"
              },
              {
                "id": 5129,
                "name": "REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5891:49:7"
              },
              {
                "id": 5130,
                "name": "REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "5950:37:7"
              },
              {
                "id": 5131,
                "name": "SET_COLLATERAL_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "5997:33:7"
              },
              {
                "id": 5132,
                "name": "SET_COLLATERAL_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "6040:32:7"
              },
              {
                "id": 5133,
                "name": "SET_COMPTROLLER_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6082:27:7"
              },
              {
                "id": 5134,
                "name": "SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "6119:46:7"
              },
              {
                "id": 5135,
                "name": "SET_INTEREST_RATE_MODEL_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "6175:35:7"
              },
              {
                "id": 5136,
                "name": "SET_INTEREST_RATE_MODEL_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6220:35:7"
              },
              {
                "id": 5137,
                "name": "SET_MAX_ASSETS_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6265:26:7"
              },
              {
                "id": 5138,
                "name": "SET_ORACLE_MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "6301:28:7"
              },
              {
                "id": 5139,
                "name": "SET_PENDING_ADMIN_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6339:29:7"
              },
              {
                "id": 5140,
                "name": "SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "6378:41:7"
              },
              {
                "id": 5141,
                "name": "SET_RESERVE_FACTOR_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "6429:30:7"
              },
              {
                "id": 5142,
                "name": "SET_RESERVE_FACTOR_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "6469:30:7"
              },
              {
                "id": 5143,
                "name": "SET_RESERVE_FACTOR_BOUNDS_CHECK",
                "nodeType": "EnumValue",
                "src": "6509:31:7"
              },
              {
                "id": 5144,
                "name": "TRANSFER_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "6550:30:7"
              },
              {
                "id": 5145,
                "name": "TRANSFER_NOT_ALLOWED",
                "nodeType": "EnumValue",
                "src": "6590:20:7"
              },
              {
                "id": 5146,
                "name": "TRANSFER_NOT_ENOUGH",
                "nodeType": "EnumValue",
                "src": "6620:19:7"
              },
              {
                "id": 5147,
                "name": "TRANSFER_TOO_MUCH",
                "nodeType": "EnumValue",
                "src": "6649:17:7"
              }
            ],
            "name": "FailureInfo",
            "nodeType": "EnumDefinition",
            "src": "3150:3522:7"
          },
          {
            "anonymous": false,
            "documentation": "@dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\ncontract-specific code that enables us to report opaque error codes from upgradeable contracts.*",
            "id": 5156,
            "name": "Failure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5150,
                  "indexed": false,
                  "name": "error",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6931:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6931:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5152,
                  "indexed": false,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6946:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6946:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5154,
                  "indexed": false,
                  "name": "detail",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6960:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6960:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6930:45:7"
            },
            "src": "6917:59:7"
          },
          {
            "body": {
              "id": 5179,
              "nodeType": "Block",
              "src": "7176:91:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5167,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5158,
                            "src": "7207:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 5166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7199:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7199:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5170,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5160,
                            "src": "7221:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7213:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7213:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7228:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5165,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5156,
                      "src": "7191:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7191:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "EmitStatement",
                  "src": "7186:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5176,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5158,
                        "src": "7256:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 5175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7248:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7248:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5164,
                  "id": 5178,
                  "nodeType": "Return",
                  "src": "7241:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting a known error from the money market or a non-upgradeable collaborator",
            "id": 5180,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5158,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7120:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5157,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "7120:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5160,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7131:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$5148",
                    "typeString": "enum TokenErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5159,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5148,
                    "src": "7131:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                      "typeString": "enum TokenErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7119:29:7"
            },
            "returnParameters": {
              "id": 5164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5163,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7167:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7167:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7166:9:7"
            },
            "scope": 5207,
            "src": "7106:161:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5205,
              "nodeType": "Block",
              "src": "7482:101:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5193,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "7513:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 5192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7505:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7505:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5196,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5184,
                            "src": "7527:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7519:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7519:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5198,
                        "name": "opaqueError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "7534:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5191,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5156,
                      "src": "7497:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7497:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5200,
                  "nodeType": "EmitStatement",
                  "src": "7492:54:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5202,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5182,
                        "src": "7572:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 5201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7564:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7564:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5190,
                  "id": 5204,
                  "nodeType": "Return",
                  "src": "7557:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting an opaque error from an upgradeable collaborator contract",
            "id": 5206,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "failOpaque",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5182,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7405:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5181,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "7405:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5184,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7416:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$5148",
                    "typeString": "enum TokenErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5183,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5148,
                    "src": "7416:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                      "typeString": "enum TokenErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5186,
                  "name": "opaqueError",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7434:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5185,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7434:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7404:50:7"
            },
            "returnParameters": {
              "id": 5190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5189,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7473:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7473:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7472:9:7"
            },
            "scope": 5207,
            "src": "7385:198:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5208,
        "src": "2299:5286:7"
      }
    ],
    "src": "0:7586:7"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/rtoken-contracts/rtoken-contracts/packages/contracts/compound/contracts/ErrorReporter.sol",
    "exportedSymbols": {
      "ComptrollerErrorReporter": [
        5051
      ],
      "TokenErrorReporter": [
        5207
      ]
    },
    "id": 5208,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4952,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5051,
        "linearizedBaseContracts": [
          5051
        ],
        "name": "ComptrollerErrorReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ComptrollerErrorReporter.Error",
            "id": 4971,
            "members": [
              {
                "id": 4953,
                "name": "NO_ERROR",
                "nodeType": "EnumValue",
                "src": "86:8:7"
              },
              {
                "id": 4954,
                "name": "UNAUTHORIZED",
                "nodeType": "EnumValue",
                "src": "104:12:7"
              },
              {
                "id": 4955,
                "name": "COMPTROLLER_MISMATCH",
                "nodeType": "EnumValue",
                "src": "126:20:7"
              },
              {
                "id": 4956,
                "name": "INSUFFICIENT_SHORTFALL",
                "nodeType": "EnumValue",
                "src": "156:22:7"
              },
              {
                "id": 4957,
                "name": "INSUFFICIENT_LIQUIDITY",
                "nodeType": "EnumValue",
                "src": "188:22:7"
              },
              {
                "id": 4958,
                "name": "INVALID_CLOSE_FACTOR",
                "nodeType": "EnumValue",
                "src": "220:20:7"
              },
              {
                "id": 4959,
                "name": "INVALID_COLLATERAL_FACTOR",
                "nodeType": "EnumValue",
                "src": "250:25:7"
              },
              {
                "id": 4960,
                "name": "INVALID_LIQUIDATION_INCENTIVE",
                "nodeType": "EnumValue",
                "src": "285:29:7"
              },
              {
                "id": 4961,
                "name": "MARKET_NOT_ENTERED",
                "nodeType": "EnumValue",
                "src": "324:18:7"
              },
              {
                "id": 4962,
                "name": "MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "352:17:7"
              },
              {
                "id": 4963,
                "name": "MARKET_ALREADY_LISTED",
                "nodeType": "EnumValue",
                "src": "379:21:7"
              },
              {
                "id": 4964,
                "name": "MATH_ERROR",
                "nodeType": "EnumValue",
                "src": "410:10:7"
              },
              {
                "id": 4965,
                "name": "NONZERO_BORROW_BALANCE",
                "nodeType": "EnumValue",
                "src": "430:22:7"
              },
              {
                "id": 4966,
                "name": "PRICE_ERROR",
                "nodeType": "EnumValue",
                "src": "462:11:7"
              },
              {
                "id": 4967,
                "name": "REJECTION",
                "nodeType": "EnumValue",
                "src": "483:9:7"
              },
              {
                "id": 4968,
                "name": "SNAPSHOT_ERROR",
                "nodeType": "EnumValue",
                "src": "502:14:7"
              },
              {
                "id": 4969,
                "name": "TOO_MANY_ASSETS",
                "nodeType": "EnumValue",
                "src": "526:15:7"
              },
              {
                "id": 4970,
                "name": "TOO_MUCH_REPAY",
                "nodeType": "EnumValue",
                "src": "551:14:7"
              }
            ],
            "name": "Error",
            "nodeType": "EnumDefinition",
            "src": "65:506:7"
          },
          {
            "canonicalName": "ComptrollerErrorReporter.FailureInfo",
            "id": 4992,
            "members": [
              {
                "id": 4972,
                "name": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "604:32:7"
              },
              {
                "id": 4973,
                "name": "ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK",
                "nodeType": "EnumValue",
                "src": "646:43:7"
              },
              {
                "id": 4974,
                "name": "EXIT_MARKET_BALANCE_OWED",
                "nodeType": "EnumValue",
                "src": "699:24:7"
              },
              {
                "id": 4975,
                "name": "EXIT_MARKET_REJECTION",
                "nodeType": "EnumValue",
                "src": "733:21:7"
              },
              {
                "id": 4976,
                "name": "SET_CLOSE_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "764:28:7"
              },
              {
                "id": 4977,
                "name": "SET_CLOSE_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "802:27:7"
              },
              {
                "id": 4978,
                "name": "SET_COLLATERAL_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "839:33:7"
              },
              {
                "id": 4979,
                "name": "SET_COLLATERAL_FACTOR_NO_EXISTS",
                "nodeType": "EnumValue",
                "src": "882:31:7"
              },
              {
                "id": 4980,
                "name": "SET_COLLATERAL_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "923:32:7"
              },
              {
                "id": 4981,
                "name": "SET_COLLATERAL_FACTOR_WITHOUT_PRICE",
                "nodeType": "EnumValue",
                "src": "965:35:7"
              },
              {
                "id": 4982,
                "name": "SET_IMPLEMENTATION_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1010:30:7"
              },
              {
                "id": 4983,
                "name": "SET_LIQUIDATION_INCENTIVE_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1050:37:7"
              },
              {
                "id": 4984,
                "name": "SET_LIQUIDATION_INCENTIVE_VALIDATION",
                "nodeType": "EnumValue",
                "src": "1097:36:7"
              },
              {
                "id": 4985,
                "name": "SET_MAX_ASSETS_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1143:26:7"
              },
              {
                "id": 4986,
                "name": "SET_PENDING_ADMIN_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1179:29:7"
              },
              {
                "id": 4987,
                "name": "SET_PENDING_IMPLEMENTATION_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1218:38:7"
              },
              {
                "id": 4988,
                "name": "SET_PRICE_ORACLE_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1266:28:7"
              },
              {
                "id": 4989,
                "name": "SUPPORT_MARKET_EXISTS",
                "nodeType": "EnumValue",
                "src": "1304:21:7"
              },
              {
                "id": 4990,
                "name": "SUPPORT_MARKET_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "1335:26:7"
              },
              {
                "id": 4991,
                "name": "ZUNUSED",
                "nodeType": "EnumValue",
                "src": "1371:7:7"
              }
            ],
            "name": "FailureInfo",
            "nodeType": "EnumDefinition",
            "src": "577:807:7"
          },
          {
            "anonymous": false,
            "documentation": "@dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\ncontract-specific code that enables us to report opaque error codes from upgradeable contracts.*",
            "id": 5000,
            "name": "Failure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4994,
                  "indexed": false,
                  "name": "error",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1643:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4993,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1643:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4996,
                  "indexed": false,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1658:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1658:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4998,
                  "indexed": false,
                  "name": "detail",
                  "nodeType": "VariableDeclaration",
                  "scope": 5000,
                  "src": "1672:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4997,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1672:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1642:45:7"
            },
            "src": "1629:59:7"
          },
          {
            "body": {
              "id": 5023,
              "nodeType": "Block",
              "src": "1888:91:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5011,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5002,
                            "src": "1919:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          ],
                          "id": 5010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1911:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1911:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5014,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5004,
                            "src": "1933:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1925:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1925:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1940:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5009,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5000,
                      "src": "1903:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1903:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5018,
                  "nodeType": "EmitStatement",
                  "src": "1898:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5020,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5002,
                        "src": "1968:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      ],
                      "id": 5019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1960:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1960:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5008,
                  "id": 5022,
                  "nodeType": "Return",
                  "src": "1953:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting a known error from the money market or a non-upgradeable collaborator",
            "id": 5024,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5002,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1832:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$4971",
                    "typeString": "enum ComptrollerErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5001,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4971,
                    "src": "1832:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$4971",
                      "typeString": "enum ComptrollerErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5004,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1843:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$4992",
                    "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5003,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4992,
                    "src": "1843:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$4992",
                      "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1831:29:7"
            },
            "returnParameters": {
              "id": 5008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5007,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5024,
                  "src": "1879:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5006,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1879:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1878:9:7"
            },
            "scope": 5051,
            "src": "1818:161:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5049,
              "nodeType": "Block",
              "src": "2194:101:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5037,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5026,
                            "src": "2225:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$4971",
                              "typeString": "enum ComptrollerErrorReporter.Error"
                            }
                          ],
                          "id": 5036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2217:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2217:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5040,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5028,
                            "src": "2239:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$4992",
                              "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2231:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5041,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2231:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5042,
                        "name": "opaqueError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5030,
                        "src": "2246:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5035,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5000,
                      "src": "2209:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2209:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5044,
                  "nodeType": "EmitStatement",
                  "src": "2204:54:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5046,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5026,
                        "src": "2284:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$4971",
                          "typeString": "enum ComptrollerErrorReporter.Error"
                        }
                      ],
                      "id": 5045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2276:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5034,
                  "id": 5048,
                  "nodeType": "Return",
                  "src": "2269:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting an opaque error from an upgradeable collaborator contract",
            "id": 5050,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "failOpaque",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5031,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5026,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2117:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$4971",
                    "typeString": "enum ComptrollerErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5025,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4971,
                    "src": "2117:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$4971",
                      "typeString": "enum ComptrollerErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5028,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2128:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$4992",
                    "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5027,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4992,
                    "src": "2128:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$4992",
                      "typeString": "enum ComptrollerErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5030,
                  "name": "opaqueError",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2146:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5029,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2146:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2116:50:7"
            },
            "returnParameters": {
              "id": 5034,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5033,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5050,
                  "src": "2185:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2185:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2184:9:7"
            },
            "scope": 5051,
            "src": "2097:198:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5208,
        "src": "25:2272:7"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5207,
        "linearizedBaseContracts": [
          5207
        ],
        "name": "TokenErrorReporter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "TokenErrorReporter.Error",
            "id": 5069,
            "members": [
              {
                "id": 5052,
                "name": "NO_ERROR",
                "nodeType": "EnumValue",
                "src": "2354:8:7"
              },
              {
                "id": 5053,
                "name": "UNAUTHORIZED",
                "nodeType": "EnumValue",
                "src": "2372:12:7"
              },
              {
                "id": 5054,
                "name": "BAD_INPUT",
                "nodeType": "EnumValue",
                "src": "2394:9:7"
              },
              {
                "id": 5055,
                "name": "COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "2413:21:7"
              },
              {
                "id": 5056,
                "name": "COMPTROLLER_CALCULATION_ERROR",
                "nodeType": "EnumValue",
                "src": "2444:29:7"
              },
              {
                "id": 5057,
                "name": "INTEREST_RATE_MODEL_ERROR",
                "nodeType": "EnumValue",
                "src": "2483:25:7"
              },
              {
                "id": 5058,
                "name": "INVALID_ACCOUNT_PAIR",
                "nodeType": "EnumValue",
                "src": "2518:20:7"
              },
              {
                "id": 5059,
                "name": "INVALID_CLOSE_AMOUNT_REQUESTED",
                "nodeType": "EnumValue",
                "src": "2548:30:7"
              },
              {
                "id": 5060,
                "name": "INVALID_COLLATERAL_FACTOR",
                "nodeType": "EnumValue",
                "src": "2588:25:7"
              },
              {
                "id": 5061,
                "name": "MATH_ERROR",
                "nodeType": "EnumValue",
                "src": "2623:10:7"
              },
              {
                "id": 5062,
                "name": "MARKET_NOT_FRESH",
                "nodeType": "EnumValue",
                "src": "2643:16:7"
              },
              {
                "id": 5063,
                "name": "MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "2669:17:7"
              },
              {
                "id": 5064,
                "name": "TOKEN_INSUFFICIENT_ALLOWANCE",
                "nodeType": "EnumValue",
                "src": "2696:28:7"
              },
              {
                "id": 5065,
                "name": "TOKEN_INSUFFICIENT_BALANCE",
                "nodeType": "EnumValue",
                "src": "2734:26:7"
              },
              {
                "id": 5066,
                "name": "TOKEN_INSUFFICIENT_CASH",
                "nodeType": "EnumValue",
                "src": "2770:23:7"
              },
              {
                "id": 5067,
                "name": "TOKEN_TRANSFER_IN_FAILED",
                "nodeType": "EnumValue",
                "src": "2803:24:7"
              },
              {
                "id": 5068,
                "name": "TOKEN_TRANSFER_OUT_FAILED",
                "nodeType": "EnumValue",
                "src": "2837:25:7"
              }
            ],
            "name": "Error",
            "nodeType": "EnumDefinition",
            "src": "2333:535:7"
          },
          {
            "canonicalName": "TokenErrorReporter.FailureInfo",
            "id": 5148,
            "members": [
              {
                "id": 5070,
                "name": "ACCEPT_ADMIN_PENDING_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "3177:32:7"
              },
              {
                "id": 5071,
                "name": "ACCRUE_INTEREST_ACCUMULATED_INTEREST_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3219:55:7"
              },
              {
                "id": 5072,
                "name": "ACCRUE_INTEREST_BORROW_RATE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3284:46:7"
              },
              {
                "id": 5073,
                "name": "ACCRUE_INTEREST_NEW_BORROW_INDEX_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3340:51:7"
              },
              {
                "id": 5074,
                "name": "ACCRUE_INTEREST_NEW_TOTAL_BORROWS_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3401:52:7"
              },
              {
                "id": 5075,
                "name": "ACCRUE_INTEREST_NEW_TOTAL_RESERVES_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3463:53:7"
              },
              {
                "id": 5076,
                "name": "ACCRUE_INTEREST_SIMPLE_INTEREST_FACTOR_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3526:57:7"
              },
              {
                "id": 5077,
                "name": "BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3593:45:7"
              },
              {
                "id": 5078,
                "name": "BORROW_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3648:29:7"
              },
              {
                "id": 5079,
                "name": "BORROW_CASH_NOT_AVAILABLE",
                "nodeType": "EnumValue",
                "src": "3687:25:7"
              },
              {
                "id": 5080,
                "name": "BORROW_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "3722:22:7"
              },
              {
                "id": 5081,
                "name": "BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3754:43:7"
              },
              {
                "id": 5082,
                "name": "BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "3807:52:7"
              },
              {
                "id": 5083,
                "name": "BORROW_MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "3869:24:7"
              },
              {
                "id": 5084,
                "name": "BORROW_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "3903:28:7"
              },
              {
                "id": 5085,
                "name": "LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3941:39:7"
              },
              {
                "id": 5086,
                "name": "LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "3990:43:7"
              },
              {
                "id": 5087,
                "name": "LIQUIDATE_COLLATERAL_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4043:36:7"
              },
              {
                "id": 5088,
                "name": "LIQUIDATE_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4089:31:7"
              },
              {
                "id": 5089,
                "name": "LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED",
                "nodeType": "EnumValue",
                "src": "4130:51:7"
              },
              {
                "id": 5090,
                "name": "LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX",
                "nodeType": "EnumValue",
                "src": "4191:34:7"
              },
              {
                "id": 5091,
                "name": "LIQUIDATE_CLOSE_AMOUNT_IS_ZERO",
                "nodeType": "EnumValue",
                "src": "4235:30:7"
              },
              {
                "id": 5092,
                "name": "LIQUIDATE_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4275:25:7"
              },
              {
                "id": 5093,
                "name": "LIQUIDATE_LIQUIDATOR_IS_BORROWER",
                "nodeType": "EnumValue",
                "src": "4310:32:7"
              },
              {
                "id": 5094,
                "name": "LIQUIDATE_REPAY_BORROW_FRESH_FAILED",
                "nodeType": "EnumValue",
                "src": "4352:35:7"
              },
              {
                "id": 5095,
                "name": "LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED",
                "nodeType": "EnumValue",
                "src": "4397:40:7"
              },
              {
                "id": 5096,
                "name": "LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED",
                "nodeType": "EnumValue",
                "src": "4447:40:7"
              },
              {
                "id": 5097,
                "name": "LIQUIDATE_SEIZE_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4497:37:7"
              },
              {
                "id": 5098,
                "name": "LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER",
                "nodeType": "EnumValue",
                "src": "4544:38:7"
              },
              {
                "id": 5099,
                "name": "LIQUIDATE_SEIZE_TOO_MUCH",
                "nodeType": "EnumValue",
                "src": "4592:24:7"
              },
              {
                "id": 5100,
                "name": "MINT_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "4626:27:7"
              },
              {
                "id": 5101,
                "name": "MINT_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "4663:26:7"
              },
              {
                "id": 5102,
                "name": "MINT_EXCHANGE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4699:32:7"
              },
              {
                "id": 5103,
                "name": "MINT_EXCHANGE_RATE_READ_FAILED",
                "nodeType": "EnumValue",
                "src": "4741:30:7"
              },
              {
                "id": 5104,
                "name": "MINT_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "4781:20:7"
              },
              {
                "id": 5105,
                "name": "MINT_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4811:43:7"
              },
              {
                "id": 5106,
                "name": "MINT_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "4864:40:7"
              },
              {
                "id": 5107,
                "name": "MINT_TRANSFER_IN_FAILED",
                "nodeType": "EnumValue",
                "src": "4914:23:7"
              },
              {
                "id": 5108,
                "name": "MINT_TRANSFER_IN_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "4947:29:7"
              },
              {
                "id": 5109,
                "name": "REDEEM_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "4986:29:7"
              },
              {
                "id": 5110,
                "name": "REDEEM_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "5025:28:7"
              },
              {
                "id": 5111,
                "name": "REDEEM_EXCHANGE_TOKENS_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5063:41:7"
              },
              {
                "id": 5112,
                "name": "REDEEM_EXCHANGE_AMOUNT_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5114:41:7"
              },
              {
                "id": 5113,
                "name": "REDEEM_EXCHANGE_RATE_READ_FAILED",
                "nodeType": "EnumValue",
                "src": "5165:32:7"
              },
              {
                "id": 5114,
                "name": "REDEEM_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "5207:22:7"
              },
              {
                "id": 5115,
                "name": "REDEEM_NEW_ACCOUNT_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5239:45:7"
              },
              {
                "id": 5116,
                "name": "REDEEM_NEW_TOTAL_SUPPLY_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5294:42:7"
              },
              {
                "id": 5117,
                "name": "REDEEM_TRANSFER_OUT_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "5346:32:7"
              },
              {
                "id": 5118,
                "name": "REDUCE_RESERVES_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5388:38:7"
              },
              {
                "id": 5119,
                "name": "REDUCE_RESERVES_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "5436:27:7"
              },
              {
                "id": 5120,
                "name": "REDUCE_RESERVES_CASH_NOT_AVAILABLE",
                "nodeType": "EnumValue",
                "src": "5473:34:7"
              },
              {
                "id": 5121,
                "name": "REDUCE_RESERVES_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "5517:27:7"
              },
              {
                "id": 5122,
                "name": "REDUCE_RESERVES_VALIDATION",
                "nodeType": "EnumValue",
                "src": "5554:26:7"
              },
              {
                "id": 5123,
                "name": "REPAY_BEHALF_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5590:35:7"
              },
              {
                "id": 5124,
                "name": "REPAY_BORROW_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "5635:35:7"
              },
              {
                "id": 5125,
                "name": "REPAY_BORROW_ACCUMULATED_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5680:51:7"
              },
              {
                "id": 5126,
                "name": "REPAY_BORROW_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "5741:34:7"
              },
              {
                "id": 5127,
                "name": "REPAY_BORROW_FRESHNESS_CHECK",
                "nodeType": "EnumValue",
                "src": "5785:28:7"
              },
              {
                "id": 5128,
                "name": "REPAY_BORROW_NEW_ACCOUNT_BORROW_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5823:58:7"
              },
              {
                "id": 5129,
                "name": "REPAY_BORROW_NEW_TOTAL_BALANCE_CALCULATION_FAILED",
                "nodeType": "EnumValue",
                "src": "5891:49:7"
              },
              {
                "id": 5130,
                "name": "REPAY_BORROW_TRANSFER_IN_NOT_POSSIBLE",
                "nodeType": "EnumValue",
                "src": "5950:37:7"
              },
              {
                "id": 5131,
                "name": "SET_COLLATERAL_FACTOR_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "5997:33:7"
              },
              {
                "id": 5132,
                "name": "SET_COLLATERAL_FACTOR_VALIDATION",
                "nodeType": "EnumValue",
                "src": "6040:32:7"
              },
              {
                "id": 5133,
                "name": "SET_COMPTROLLER_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6082:27:7"
              },
              {
                "id": 5134,
                "name": "SET_INTEREST_RATE_MODEL_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "6119:46:7"
              },
              {
                "id": 5135,
                "name": "SET_INTEREST_RATE_MODEL_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "6175:35:7"
              },
              {
                "id": 5136,
                "name": "SET_INTEREST_RATE_MODEL_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6220:35:7"
              },
              {
                "id": 5137,
                "name": "SET_MAX_ASSETS_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6265:26:7"
              },
              {
                "id": 5138,
                "name": "SET_ORACLE_MARKET_NOT_LISTED",
                "nodeType": "EnumValue",
                "src": "6301:28:7"
              },
              {
                "id": 5139,
                "name": "SET_PENDING_ADMIN_OWNER_CHECK",
                "nodeType": "EnumValue",
                "src": "6339:29:7"
              },
              {
                "id": 5140,
                "name": "SET_RESERVE_FACTOR_ACCRUE_INTEREST_FAILED",
                "nodeType": "EnumValue",
                "src": "6378:41:7"
              },
              {
                "id": 5141,
                "name": "SET_RESERVE_FACTOR_ADMIN_CHECK",
                "nodeType": "EnumValue",
                "src": "6429:30:7"
              },
              {
                "id": 5142,
                "name": "SET_RESERVE_FACTOR_FRESH_CHECK",
                "nodeType": "EnumValue",
                "src": "6469:30:7"
              },
              {
                "id": 5143,
                "name": "SET_RESERVE_FACTOR_BOUNDS_CHECK",
                "nodeType": "EnumValue",
                "src": "6509:31:7"
              },
              {
                "id": 5144,
                "name": "TRANSFER_COMPTROLLER_REJECTION",
                "nodeType": "EnumValue",
                "src": "6550:30:7"
              },
              {
                "id": 5145,
                "name": "TRANSFER_NOT_ALLOWED",
                "nodeType": "EnumValue",
                "src": "6590:20:7"
              },
              {
                "id": 5146,
                "name": "TRANSFER_NOT_ENOUGH",
                "nodeType": "EnumValue",
                "src": "6620:19:7"
              },
              {
                "id": 5147,
                "name": "TRANSFER_TOO_MUCH",
                "nodeType": "EnumValue",
                "src": "6649:17:7"
              }
            ],
            "name": "FailureInfo",
            "nodeType": "EnumDefinition",
            "src": "3150:3522:7"
          },
          {
            "anonymous": false,
            "documentation": "@dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\ncontract-specific code that enables us to report opaque error codes from upgradeable contracts.*",
            "id": 5156,
            "name": "Failure",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 5155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5150,
                  "indexed": false,
                  "name": "error",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6931:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6931:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5152,
                  "indexed": false,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6946:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5151,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6946:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5154,
                  "indexed": false,
                  "name": "detail",
                  "nodeType": "VariableDeclaration",
                  "scope": 5156,
                  "src": "6960:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6960:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6930:45:7"
            },
            "src": "6917:59:7"
          },
          {
            "body": {
              "id": 5179,
              "nodeType": "Block",
              "src": "7176:91:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5167,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5158,
                            "src": "7207:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 5166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7199:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7199:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5170,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5160,
                            "src": "7221:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7213:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5171,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7213:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7228:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 5165,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5156,
                      "src": "7191:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7191:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5174,
                  "nodeType": "EmitStatement",
                  "src": "7186:44:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5176,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5158,
                        "src": "7256:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 5175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7248:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7248:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5164,
                  "id": 5178,
                  "nodeType": "Return",
                  "src": "7241:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting a known error from the money market or a non-upgradeable collaborator",
            "id": 5180,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fail",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5158,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7120:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5157,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "7120:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5160,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7131:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$5148",
                    "typeString": "enum TokenErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5159,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5148,
                    "src": "7131:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                      "typeString": "enum TokenErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7119:29:7"
            },
            "returnParameters": {
              "id": 5164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5163,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5180,
                  "src": "7167:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7167:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7166:9:7"
            },
            "scope": 5207,
            "src": "7106:161:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5205,
              "nodeType": "Block",
              "src": "7482:101:7",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5193,
                            "name": "err",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "7513:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Error_$5069",
                              "typeString": "enum TokenErrorReporter.Error"
                            }
                          ],
                          "id": 5192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7505:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7505:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5196,
                            "name": "info",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5184,
                            "src": "7527:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_FailureInfo_$5148",
                              "typeString": "enum TokenErrorReporter.FailureInfo"
                            }
                          ],
                          "id": 5195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7519:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 5197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7519:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5198,
                        "name": "opaqueError",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5186,
                        "src": "7534:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5191,
                      "name": "Failure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5156,
                      "src": "7497:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256)"
                      }
                    },
                    "id": 5199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7497:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5200,
                  "nodeType": "EmitStatement",
                  "src": "7492:54:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5202,
                        "name": "err",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5182,
                        "src": "7572:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_Error_$5069",
                          "typeString": "enum TokenErrorReporter.Error"
                        }
                      ],
                      "id": 5201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7564:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint256"
                    },
                    "id": 5203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7564:12:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5190,
                  "id": 5204,
                  "nodeType": "Return",
                  "src": "7557:19:7"
                }
              ]
            },
            "documentation": "@dev use this when reporting an opaque error from an upgradeable collaborator contract",
            "id": 5206,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "failOpaque",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5182,
                  "name": "err",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7405:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Error_$5069",
                    "typeString": "enum TokenErrorReporter.Error"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5181,
                    "name": "Error",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5069,
                    "src": "7405:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Error_$5069",
                      "typeString": "enum TokenErrorReporter.Error"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5184,
                  "name": "info",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7416:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_FailureInfo_$5148",
                    "typeString": "enum TokenErrorReporter.FailureInfo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5183,
                    "name": "FailureInfo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5148,
                    "src": "7416:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_FailureInfo_$5148",
                      "typeString": "enum TokenErrorReporter.FailureInfo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5186,
                  "name": "opaqueError",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7434:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5185,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7434:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7404:50:7"
            },
            "returnParameters": {
              "id": 5190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5189,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5206,
                  "src": "7473:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5188,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7473:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7472:9:7"
            },
            "scope": 5207,
            "src": "7385:198:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5208,
        "src": "2299:5286:7"
      }
    ],
    "src": "0:7586:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.12+commit.7709ece9.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.21",
  "updatedAt": "2020-04-22T17:31:54.521Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}