{
  "language": "Solidity",
  "sources": {
    "contracts/Multicall2.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.5.0;\npragma experimental ABIEncoderV2;\n\n/// @title Multicall2 - Aggregate results from multiple read-only function calls\n/// @author Michael Elliot <mike@makerdao.com>\n/// @author Joshua Levine <joshua@makerdao.com>\n/// @author Nick Johnson <arachnid@notdot.net>\n\ncontract Multicall2 {\n    struct Call {\n        address target;\n        bytes callData;\n    }\n    struct Result {\n        bool success;\n        bytes returnData;\n    }\n\n    function aggregate(Call[] memory calls)\n        public\n        returns (uint256 blockNumber, bytes[] memory returnData)\n    {\n        blockNumber = block.number;\n        returnData = new bytes[](calls.length);\n        for (uint256 i = 0; i < calls.length; i++) {\n            (bool success, bytes memory ret) =\n                calls[i].target.call(calls[i].callData);\n            require(success, \"Multicall aggregate: call failed\");\n            returnData[i] = ret;\n        }\n    }\n\n    function blockAndAggregate(Call[] memory calls)\n        public\n        returns (\n            uint256 blockNumber,\n            bytes32 blockHash,\n            Result[] memory returnData\n        )\n    {\n        (blockNumber, blockHash, returnData) = tryBlockAndAggregate(\n            true,\n            calls\n        );\n    }\n\n    function getBlockHash(uint256 blockNumber)\n        public\n        view\n        returns (bytes32 blockHash)\n    {\n        blockHash = blockhash(blockNumber);\n    }\n\n    function getBlockNumber() public view returns (uint256 blockNumber) {\n        blockNumber = block.number;\n    }\n\n    function getCurrentBlockCoinbase() public view returns (address coinbase) {\n        coinbase = block.coinbase;\n    }\n\n    function getCurrentBlockDifficulty()\n        public\n        view\n        returns (uint256 difficulty)\n    {\n        difficulty = block.difficulty;\n    }\n\n    function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) {\n        gaslimit = block.gaslimit;\n    }\n\n    function getCurrentBlockTimestamp()\n        public\n        view\n        returns (uint256 timestamp)\n    {\n        timestamp = block.timestamp;\n    }\n\n    function getEthBalance(address addr) public view returns (uint256 balance) {\n        balance = addr.balance;\n    }\n\n    function getLastBlockHash() public view returns (bytes32 blockHash) {\n        blockHash = blockhash(block.number - 1);\n    }\n\n    function tryAggregate(bool requireSuccess, Call[] memory calls)\n        public\n        returns (Result[] memory returnData)\n    {\n        returnData = new Result[](calls.length);\n        for (uint256 i = 0; i < calls.length; i++) {\n            (bool success, bytes memory ret) =\n                calls[i].target.call(calls[i].callData);\n\n            if (requireSuccess) {\n                require(success, \"Multicall2 aggregate: call failed\");\n            }\n\n            returnData[i] = Result(success, ret);\n        }\n    }\n\n    function tryBlockAndAggregate(bool requireSuccess, Call[] memory calls)\n        public\n        returns (\n            uint256 blockNumber,\n            bytes32 blockHash,\n            Result[] memory returnData\n        )\n    {\n        blockNumber = block.number;\n        blockHash = blockhash(block.number);\n        returnData = tryAggregate(requireSuccess, calls);\n    }\n}\n"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "abi",
          "evm.bytecode",
          "evm.deployedBytecode",
          "evm.methodIdentifiers",
          "metadata",
          "devdoc",
          "userdoc",
          "storageLayout",
          "evm.gasEstimates"
        ],
        "": [
          "ast"
        ]
      }
    },
    "metadata": {
      "useLiteralContent": true
    },
    "libraries": {
      "": {
        "__CACHE_BREAKER__": "0x00000000d41867734bbee4c6863d9255b2b06ac1"
      }
    }
  }
}