{
  "contractName": "BidOnAddresses",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_uri",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC1155",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "collateralTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CollateralWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ConditionCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "CustomerRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC1155",
          "name": "collateralContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "collateralTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "DonateCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleFinished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oracleOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleOwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "numerator",
          "type": "uint256"
        }
      ],
      "name": "ReportedNumerator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint64[]",
          "name": "conditions",
          "type": "uint64[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "numerators",
          "type": "uint256[]"
        }
      ],
      "name": "ReportedNumeratorsBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOracleOwner",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "changeOracleOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "collateralOwing",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "conditionOwners",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "donate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "finishOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "gatherDeFiProfit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "gracePeriodEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        }
      ],
      "name": "isConditionalLocked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "isOracleFinished",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastCollateralBalanceFirstRoundMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastCollateralBalanceSecondRoundMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxConditionId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxOracleId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "oracleOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "payoutDenominator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        }
      ],
      "name": "payoutNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_numerator",
          "type": "uint256"
        }
      ],
      "name": "reportNumerator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint64[]",
          "name": "_conditions",
          "type": "uint64[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_numerators",
          "type": "uint256[]"
        }
      ],
      "name": "reportNumeratorsBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "updateGracePeriodEnds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "usersWithdrewInFirstRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "withdrawCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_customer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "registerCustomer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC1155\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"collateralTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CollateralWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"customer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConditionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"customer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"CustomerRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC1155\",\"name\":\"collateralContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"collateralTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"DonateCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oracleOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleOwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"}],\"name\":\"ReportedNumerator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64[]\",\"name\":\"conditions\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"numerators\",\"type\":\"uint256[]\"}],\"name\":\"ReportedNumeratorsBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOracleOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"changeOracleOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"collateralOwing\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"conditionOwners\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"finishOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"gatherDeFiProfit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"gracePeriodEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"}],\"name\":\"isConditionalLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"isOracleFinished\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastCollateralBalanceFirstRoundMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastCollateralBalanceSecondRoundMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConditionId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxOracleId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"oracleOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"payoutDenominator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"}],\"name\":\"payoutNumerator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_customer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"registerCustomer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numerator\",\"type\":\"uint256\"}],\"name\":\"reportNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint64[]\",\"name\":\"_conditions\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_numerators\",\"type\":\"uint256[]\"}],\"name\":\"reportNumeratorsBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"updateGracePeriodEnds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"usersWithdrewInFirstRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"withdrawCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Victor Porton\",\"events\":{\"CustomerRegistered(address,address,uint256,bytes)\":{\"params\":{\"customer\":\"The customer address.\",\"data\":\"Additional data.\",\"sender\":\"`msg.sender`.\"}}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"changeOracleOwner(address,uint64)\":{\"params\":{\"_newOracleOwner\":\"New owner.\",\"_oracleId\":\"The oracle whose owner to change.\"}},\"collateralOwing(address,uint256,uint64,uint256,address)\":{\"params\":{\"_collateralContractAddress\":\"The ERC-1155 collateral token contract.\",\"_collateralTokenId\":\"The ERC-1155 collateral token ID.\",\"_condition\":\"The condition (the original receiver of a conditional token).\",\"_oracleId\":\"From which oracle's \\\"account\\\" to withdraw.\",\"_user\":\"The user to which we may owe.\"}},\"constructor\":{\"params\":{\"_uri\":\"The ERC-1155 token URI.\"}},\"donate(address,uint256,uint64,uint256,address,address,bytes)\":{\"params\":{\"_amount\":\"The amount to donate.\",\"_collateralContractAddress\":\"The collateral ERC-1155 contract address.\",\"_collateralTokenId\":\"The collateral ERC-1155 token ID.\",\"_data\":\"Additional transaction data.\",\"_from\":\"From whom to take the donation.\",\"_oracleId\":\"The oracle ID to whose ecosystem to donate to.\",\"_to\":\"On whose account the donation amount is assigned.\"}},\"finishOracle(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID. You should set grace period end time before calling this method.\"}},\"gatherDeFiProfit(address,uint256,uint64,bytes)\":{\"params\":{\"_collateralContractAddress\":\"The collateral ERC-1155 contract address.\",\"_collateralTokenId\":\"The collateral ERC-1155 token ID.\",\"_data\":\"Additional transaction data.\",\"_oracleId\":\"The oracle ID to whose ecosystem to donate to.\"}},\"gracePeriodEnd(uint64)\":{\"params\":{\"_oracleId\":\"For which oracle.\"}},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC1155-isApprovedForAll}.\"},\"isConditionalLocked(address,uint256)\":{\"params\":{\"_condition\":\"The condition (the original receiver of a conditional token).\",\"_user\":\"Querying if locked for this user.\"}},\"isOracleFinished(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID.\"},\"returns\":{\"_0\":\"`true` if it has finished.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"oracleOwner(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID.\"}},\"payoutDenominator(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID. The result can't change if the oracle has finished.\"}},\"payoutNumerator(uint64,uint256)\":{\"params\":{\"_condition\":\"The condition (the original receiver of a conditional token). The result can't change if the oracle has finished.\",\"_oracleId\":\"The oracle ID.\"}},\"registerCustomer(address,bytes)\":{\"params\":{\"_customer\":\"The address of the customer.\",\"_data\":\"Additional data.\"}},\"reportNumerator(uint64,uint256,uint256)\":{\"params\":{\"_condition\":\"The condition.\",\"_numerator\":\"The relative score of the condition. Note: We could make oracles easily verificable by a hash of all the data, but       - It may need allowing to set a numerator only once.       - It may be not necessary because future technology will allow to aggregate blockchains.\",\"_oracleId\":\"The oracle ID.\"}},\"reportNumeratorsBatch(uint64,uint64[],uint256[])\":{\"params\":{\"_conditions\":\"The conditions.\",\"_numerators\":\"The relative scores of the condition.\",\"_oracleId\":\"The oracle ID.\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"totalSupply(uint256)\":{\"params\":{\"id\":\"Token ID.\"},\"returns\":{\"_0\":\"Total supply.\"}},\"uri(uint256)\":{\"details\":\"See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\\\{id\\\\}` substring with the actual token type ID.\"},\"withdrawCollateral(address,uint256,uint64,uint256,bytes)\":{\"params\":{\"_collateralContractAddress\":\"The ERC-1155 collateral token contract.\",\"_collateralTokenId\":\"The ERC-1155 collateral token ID.\",\"_condition\":\"The condition.\",\"_data\":\"Additional data. Notes: - It is made impossible to withdraw somebody's other collateral, as otherwise we can't mark non-active   accounts in grace period. - We can't transfer to somebody other than `msg.sender` because anybody can transfer   (needed for multi-level transfers). - After this function is called, it becomes impossible to transfer the corresponding conditional token   of `msg.sender` (to prevent its repeated withdrawal).\",\"_oracleId\":\"From which oracle's \\\"account\\\" to withdraw.\"}}},\"title\":\"Bidding on Ethereum addresses\",\"version\":1},\"userdoc\":{\"events\":{\"CollateralWithdrawn(address,uint256,uint64,address,uint256)\":{\"notice\":\"Emitted when collateral is withdrawn.\"},\"ConditionCreated(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an oracle owner is set.\"},\"CustomerRegistered(address,address,uint256,bytes)\":{\"notice\":\"Customer registered.\"},\"DonateCollateral(address,uint256,address,uint256,address,bytes)\":{\"notice\":\"Emitted when a collateral is donated.\"},\"OracleCreated(address,uint64)\":{\"notice\":\"Emitted when an oracle is created.\"},\"OracleFinished(uint64)\":{\"notice\":\"Emitted when an oracle is marked as having finished its work.\"},\"OracleOwnerChanged(address,uint64)\":{\"notice\":\"Emitted when an oracle owner is set.\"},\"ReportedNumerator(uint64,uint256,uint256)\":{\"notice\":\"A condition score was stored in the chain by an oracle.\"},\"ReportedNumeratorsBatch(uint64,uint64[],uint256[])\":{\"notice\":\"Some condition scores were stored in the chain by an oracle.\"}},\"kind\":\"user\",\"methods\":{\"changeOracleOwner(address,uint64)\":{\"notice\":\"Modify the owner of an oracle.\"},\"collateralOwing(address,uint256,uint64,uint256,address)\":{\"notice\":\"Calculate how much collateral is owed to a user.\"},\"donate(address,uint256,uint64,uint256,address,address,bytes)\":{\"notice\":\"Donate funds in an ERC-1155 token. First, the collateral token need to be approved to be spent by this contract from the address `_from`. It also mints a token (with a different ID), that counts donations in that token.\"},\"finishOracle(uint64)\":{\"notice\":\"Need to be called after all numerators were reported.\"},\"gatherDeFiProfit(address,uint256,uint64,bytes)\":{\"notice\":\"Gather a DeFi profit of a token previous donated to this contact.\"},\"gracePeriodEnd(uint64)\":{\"notice\":\"Retrieve the end of the grace period.\"},\"isConditionalLocked(address,uint256)\":{\"notice\":\"Are transfers of a conditinal token locked? This is used to prevent its repeated withdrawal.\"},\"isOracleFinished(uint64)\":{\"notice\":\"Check if an oracle has finished.\"},\"oracleOwner(uint64)\":{\"notice\":\"Get the oracle owner.\"},\"payoutDenominator(uint64)\":{\"notice\":\"Retrieve the last stored payout denominator (the sum of all numerators of the oracle).\"},\"payoutNumerator(uint64,uint256)\":{\"notice\":\"Retrieve the last stored payout numerator (relative score of a condition).\"},\"registerCustomer(address,bytes)\":{\"notice\":\"Anyone can register anyone. This can be called both before or after the oracle finish. However registering after the finish is useless. We check that `oracleId` exists (we don't want \\\"spammers\\\" to register themselves for a million oracles). We allow anyone to register anyone. This is useful for being registered by robots. At first it seems to be harmful to make somebody a millionaire unwillingly (he then needs a fortress and bodyguards), but: Salary tokens will be worth real money, only if the registered person publishes his works together with his Ethereum address. So, he can be made rich against his will only by impersonating him. But if somebody impersonates him, then they are able to present him richer than he is anyway, so making him vulnerable to kidnappers anyway. So having somebody registered against his will seems not to be a problem at all (except that he will see superfluous worthless tokens in Etherscan data of his account.) An alternative way would be to make registration gasless but requiring a registrant signature. This is not very good, probably: - It requires to install MetaMask. - It bothers the person to sign something, when he could just be hesitant to get what he needs. - It somehow complicates this contract.\"},\"reportNumerator(uint64,uint256,uint256)\":{\"notice\":\"Called by the oracle owner for reporting results of conditions.\"},\"reportNumeratorsBatch(uint64,uint64[],uint256[])\":{\"notice\":\"Called by the oracle owner for reporting results of several conditions.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \\\"gathering\\\" them before redeeming each oracle.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \\\"gathering\\\" them before redeeming each oracle.\"},\"totalSupply(uint256)\":{\"notice\":\"Total supply of a token (conforms to `IERC1155Views`).\"},\"updateGracePeriodEnds(uint64,uint256)\":{\"notice\":\"Set the end time of the grace period. The first withdrawal can be done *only* during the grace period. The second withdrawal can be done after the end of the grace period and only if the first withdrawal was done. The intention of the grace period is to check which of users are active (\\\"alive\\\").\"},\"usersWithdrewInFirstRound(uint64)\":{\"notice\":\"Mapping (oracleId => amount user withdrew in first round) (see `docs/Calculations.md`).\"},\"withdrawCollateral(address,uint256,uint64,uint256,bytes)\":{\"notice\":\"Transfer to `msg.sender` the collateral ERC-1155 token. The amount transferred is proportional to the score of `_condition` by the oracle.\"}},\"notice\":\"Not audited, not enough tested. This allows anyone to claim 1000 conditional tokens in order for him to transfer money from the future. See `docs/future-money.rst` and anyone to donate. We have two kinds of ERC-1155 token IDs: - conditional tokens: numbers < 2**64 - a combination of a collateral contract address and collateral token ID   (a counter of donated amount of collateral tokens, don't confuse with collateral tokens themselves) In functions of this contact `condition` is always a customer's original address. We receive funds in ERC-1155, see also https://github.com/vporton/wrap-tokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/user/Projects/future-contracts/contracts/BidOnAddresses.sol\":\"BidOnAddresses\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol\":{\"keccak256\":\"0x0f468f447255c1349ffac58a16d2a3d64e8b3a14ad8289acdf367538d1dce04e\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e610bbd572bfb395b91253f5244e0dd8f5a20c523a9df5d846f9d370b3fbb76\",\"dweb:/ipfs/QmbrcKL49Efghwx95EEM7SD2PArLkUMxdNujUk2tygb91Y\"]},\"/home/user/Projects/future-contracts/contracts/BaseLock.sol\":{\"keccak256\":\"0x477edfd8178110507dd44a101ec4d45bd82e073a8441c30062a9ca3cc3742184\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://0188608bd813e9e1de9472d2c71264fa24655ec646cc59be93d56a648fab1c6c\",\"dweb:/ipfs/QmdERM9oNEvHgmes3AWG8zAyx4ueAFKtXGsegAfXUKryDW\"]},\"/home/user/Projects/future-contracts/contracts/BidOnAddresses.sol\":{\"keccak256\":\"0x1ae7ccd475a4224b5c2b407ea4d87b2f9aebecbd6415a967e8e807e2c4adff82\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://c17cca7a78a845e6902171287fd45bded238a94571162b40123e8f76d177c9d4\",\"dweb:/ipfs/QmdnZXu1Y1PveJrUzrhzibhvPSiV7RYt3wk7FcdeHehNoK\"]},\"/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0x7dcdf324fd4d2dec68846958865ae833956cb4ad80cd83cf6f107e7c33500bf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cddf52afd931cbf983100a0415f04e6646aa90d100fd91437d2a75e3b241206\",\"dweb:/ipfs/QmXXJ2qoC1rSsKdg5s87m3BPQ3RFGw2rNrNv7KygzGJ9zQ\"]},\"/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155WithTotals.sol\":{\"keccak256\":\"0x1d5fcf7a70d6f5dcd4ddf25caece633a9b4d17154fb98b5fc9a5ae4600b2db15\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://9638d138ecec5f7f6651cf690295fdaaa99023d58555360fa801ace5cac88a9d\",\"dweb:/ipfs/QmUWf56QEe5uSfpHB7inMUGzufNZSxyu8aszLzoYMZHMYf\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xd6b90e604fb2eb2d641c7110c72440bf2dc999ec6ab8ff60f200e71ca75d1d90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b92d8ab83b21ff984b1f0d6d66897d5afb1f2052004cbcb133cea023e0ae468\",\"dweb:/ipfs/QmTarypkQrFp4UMjTh7Zzhz2nZLz5uPS4nJQtHDEuwBVe6\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9747c875899d05823aede28b60ca8d3719b8c28018f397521c4ffb05041e1ac5\",\"dweb:/ipfs/QmQEQ4jJYEGFNfcngfZ3gPkcrcWYWKbo1Bq2F57scJxbmE\"]},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"keccak256\":\"0xfce008c2ddf19a62e29e056fdddfa10204b19417ae0f711913703e4ee9dec92c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37a7bb9249c0e8aaecd0c6f33fae7f03d15aebb015f5f7f1face393cfd58d75b\",\"dweb:/ipfs/QmevqbHb43sTLnpWzrGW9WvWvktMzuP5EzYHhqZox2A5v3\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x61321d2c86346045bf394885ee3afeecc65f9daad2694bc19110967588fd7b5d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1703b877203e0447ede72dcf73f1c4f2089b415bd1c44877904128a64fafed5b\",\"dweb:/ipfs/QmaZoYDo2FWtKcwCc9zuabU6zri8KV9xJrhU614d93sLid\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol\":{\"keccak256\":\"0xd918cca1b659f588a6d12d05fd7196179a8b1eac9133d7f77da7ef3133e13256\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c75d578f42e2e2e427b934e6c41cc759be2d0a52155868308e915328c8feb2b\",\"dweb:/ipfs/QmbFNHtWAoNhe82Hy6yKTePWJRczqzp1APSBfLS9XfAN6e\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8148c99452b6793ac9599abdc8bdaf4eeb47f34590beea8aa01089be14e2990c\",\"dweb:/ipfs/QmNdenmZ4EDfH9TuBas3pHeGuZvDNo2rsfgUj6ka8vuH37\"]},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea1e4bf769f27c8c9c1442f1518b49ef6c8b71a4bd4ce88353da9e9a8ba1704\",\"dweb:/ipfs/QmR1b8sj7fxgeHqDksV4GYTjZS1qajWC3yg9VCMUJus2bF\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada84513617b7c1b2f890b44503735abaec73a1acd030112a17aac7e6c66a4a1\",\"dweb:/ipfs/QmaiFwdio67iJrfjAdkMac24eJ5sS1qD7CZW6PhUU6KjiK\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]},\"abdk-libraries-solidity/ABDKMath64x64.sol\":{\"keccak256\":\"0x67609bc0923563d05d3a8a7c681056f9702a92120777cb0bcbb40d0afbb4a015\",\"license\":\"BSD-4-Clause\",\"urls\":[\"bzz-raw://55e817969394d4e0201a8cd3763ad6776bc9fddc986febe9b4acf120e8b7ad0d\",\"dweb:/ipfs/QmNMve5ZjUfA8DJYic4sYTrDEAN6VyxcC7jWUTX25Wmnnp\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200435538038062004355833981810160405260208110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052508291508190508080620001056301ffc9a760e01b62000177565b6200011081620001fc565b62000122636cdb3d1360e11b62000177565b620001346303a24d0760e21b62000177565b50620001499050630271189760e51b62000177565b6200015b632d94347160e11b62000177565b50620001709050630271189760e51b62000177565b50620002c1565b6001600160e01b03198082161415620001d7576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200021190600390602084019062000215565b5050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024d576000855562000298565b82601f106200026857805160ff191683800117855562000298565b8280016001018555821562000298579182015b82811115620002985782518255916020019190600101906200027b565b50620002a6929150620002aa565b5090565b5b80821115620002a65760008155600101620002ab565b61408480620002d16000396000f3fe608060405234801561001057600080fd5b50600436106102255760003560e01c8063770744481161012a578063bd85b039116100bd578063ebf38ffb1161008c578063f242432a11610071578063f242432a146110ba578063f52f368d1461115c578063f59407b41461119557610225565b8063ebf38ffb14610f89578063f23a6e6114610fe257610225565b8063bd85b03914610ec7578063c3dcfd4114610ee4578063dbc0a67514610f27578063e985e9c514610f4e57610225565b8063922aac9c116100f9578063922aac9c14610be957806392d2a6bc14610c91578063a22cb46514610cb8578063bc197c8114610cf357610225565b80637707444814610aba578063789908e914610ae1578063837b0f8414610b0e578063914b5b5914610b1657610225565b80632eb2c2d6116101bd5780634e1273f41161018c57806361fbc14a1161017157806361fbc14a14610a3d5780636695821f14610a5a57806368e22f5614610a9357610225565b80634e1273f41461087657806356c742dc146109ed57610225565b80632eb2c2d6146106365780632ef0ce781461077057806334fc81c41461082a57806347a2fd8d1461085157610225565b806305096f25116101f957806305096f25146103c65780630e89341c14610469578063150b7a02146104fb5780631f1b9c051461060357610225565b8062fdd58e1461022a57806301683b4d1461027557806301a983df1461033a57806301ffc9a714610373575b600080fd5b6102636004803603604081101561024057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111c2565b60408051918252519081900360200190f35b6103386004803603604081101561028b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156102c357600080fd5b8201836020820111156102d557600080fd5b803590602001918460018302840111640100000000831117156102f757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611268945050505050565b005b6102636004803603604081101561035057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661135b565b6103b26004803603602081101561038957600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016611378565b604080519115158252519081900360200190f35b610338600480360360808110156103dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff604083013516919081019060808101606082013564010000000081111561042a57600080fd5b82018360208201111561043c57600080fd5b8035906020019184600183028401116401000000008311171561045e57600080fd5b5090925090506113af565b6104866004803603602081101561047f57600080fd5b50356114bd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c05781810151838201526020016104a8565b50505050905090810190601f1680156104ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105ce6004803603608081101561051157600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561055957600080fd5b82018360208201111561056b57600080fd5b8035906020019184600183028401116401000000008311171561058d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611573945050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103386004803603606081101561061957600080fd5b5067ffffffffffffffff813516906020810135906040013561159c565b610338600480360360a081101561064c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561068d57600080fd5b82018360208201111561069f57600080fd5b803590602001918460208302840111640100000000831117156106c157600080fd5b9193909290916020810190356401000000008111156106df57600080fd5b8201836020820111156106f157600080fd5b8035906020019184602083028401116401000000008311171561071357600080fd5b91939092909160208101903564010000000081111561073157600080fd5b82018360208201111561074357600080fd5b8035906020019184600183028401116401000000008311171561076557600080fd5b509092509050611704565b610338600480360360e081101561078657600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359267ffffffffffffffff60408301351692606083013592608081013582169260a08201359092169181019060e0810160c08201356401000000008111156107eb57600080fd5b8201836020820111156107fd57600080fd5b8035906020019184600183028401116401000000008311171561081f57600080fd5b5090925090506117e1565b6102636004803603602081101561084057600080fd5b503567ffffffffffffffff16611a44565b610859611a60565b6040805167ffffffffffffffff9092168252519081900360200190f35b61099d6004803603604081101561088c57600080fd5b8101906020810181356401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460208302840111640100000000831117156108db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184602083028401116401000000008311171561095f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a7c945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109d95781810151838201526020016109c1565b505050509050019250505060405180910390f35b610a1460048036036020811015610a0357600080fd5b503567ffffffffffffffff16611c62565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610a1460048036036020811015610a5357600080fd5b5035611c94565b61026360048036036040811015610a7057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611cbc565b61033860048036036020811015610aa957600080fd5b503567ffffffffffffffff16611cd9565b61026360048036036020811015610ad057600080fd5b503567ffffffffffffffff16611de4565b61026360048036036040811015610af757600080fd5b5067ffffffffffffffff8135169060200135611df6565b610859611e1f565b61033860048036036060811015610b2c57600080fd5b67ffffffffffffffff8235169190810190604081016020820135640100000000811115610b5857600080fd5b820183602082011115610b6a57600080fd5b80359060200191846020830284011164010000000083111715610b8c57600080fd5b919390929091602081019035640100000000811115610baa57600080fd5b820183602082011115610bbc57600080fd5b80359060200191846020830284011164010000000083111715610bde57600080fd5b509092509050611e2f565b610338600480360360a0811015610bff57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff6040830135169160608101359181019060a081016080820135640100000000811115610c5257600080fd5b820183602082011115610c6457600080fd5b80359060200191846001830284011164010000000083111715610c8657600080fd5b5090925090506120c0565b6103b260048036036020811015610ca757600080fd5b503567ffffffffffffffff16612388565b61033860048036036040811015610cce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156123a7565b6105ce600480360360a0811015610d0957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691810190606081016040820135640100000000811115610d4a57600080fd5b820183602082011115610d5c57600080fd5b80359060200191846020830284011164010000000083111715610d7e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610dce57600080fd5b820183602082011115610de057600080fd5b80359060200191846020830284011164010000000083111715610e0257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610e5257600080fd5b820183602082011115610e6457600080fd5b80359060200191846001830284011164010000000083111715610e8657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612502945050505050565b61026360048036036020811015610edd57600080fd5b503561252c565b61033860048036036040811015610efa57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013567ffffffffffffffff1661253e565b61026360048036036020811015610f3d57600080fd5b503567ffffffffffffffff16612664565b6103b260048036036040811015610f6457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612680565b610263600480360360a0811015610f9f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359167ffffffffffffffff60408301351691606081013591608090910135166126bb565b6105ce600480360360a0811015610ff857600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561104557600080fd5b82018360208201111561105757600080fd5b8035906020019184600183028401116401000000008311171561107957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126e6945050505050565b610338600480360360a08110156110d057600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561111d57600080fd5b82018360208201111561112f57600080fd5b8035906020019184600183028401116401000000008311171561115157600080fd5b509092509050612710565b6103b26004803603604081101561117257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612765565b610338600480360360408110156111ab57600080fd5b5067ffffffffffffffff813516906020013561279d565b600073ffffffffffffffffffffffffffffffffffffffff8316611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613ec1602b913960400191505060405180910390fd5b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b6000611274838361285a565b9050606061128d8483683635c9adc5dea00000846129a8565b818473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8a4b99c9fa3cf87cba75b1f3dbd1fbbe020abda7a20db70cc87d922dd138c3aa866040518080602001828103825283818151815260200191508051906020019080838360005b8381101561131b578181015183820152602001611303565b50505050905090810190601f1680156113485780820380516001836020036101000a031916815260200191505b509250505060405180910390a450505050565b600a60209081526000928352604080842090915290825290205481565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b60006113bc868686612a57565b905060006113ca8787612ada565b9050600061147e6113db30846111c2565b604080517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018b9052905173ffffffffffffffffffffffffffffffffffffffff8c169162fdd58e916044808301926020929190829003018186803b15801561144c57600080fd5b505afa158015611460573d6000803e3d6000fd5b505050506040513d602081101561147657600080fd5b505190612b31565b9050600061148c30846111c2565b61149630866111c2565b83028161149f57fe5b0490506114b28989898430308c8c6117e1565b505050505050505050565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115675780601f1061153c57610100808354040283529160200191611567565b820191906000526020600020905b81548152906001019060200180831161154a57829003601f168201915b50505050509050919050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b67ffffffffffffffff8316600090815260066020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461163b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b8361164581612388565b156116b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b6116bc858486612b7a565b604080518481529051859167ffffffffffffffff8816917f44a2b4e2bb6268fa3953b60953d3ffaca7ea60812d3a68e03fd99b6893d32f7f9181900360200190a35050505050565b60005b858110156117335761172b87878381811061171e57fe5b905060200201358a612bf5565b600101611707565b506117d7888888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250612c8392505050565b5050505050505050565b60006117ee898989612a57565b905061183284828886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5f92505050565b600061183e8a8a612ada565b905061188285828987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5f92505050565b8573ffffffffffffffffffffffffffffffffffffffff16898b73ffffffffffffffffffffffffffffffffffffffff167fe29f51ae5c82c0500c7c66f9ab40c2f68e940a624c8ba42e287ee98eeced4e378a898989604051808581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920182900397509095505050505050a48973ffffffffffffffffffffffffffffffffffffffff1663f242432a87308c8b89896040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015611a2057600080fd5b505af1158015611a34573d6000803e3d6000fd5b5050505050505050505050505050565b67ffffffffffffffff1660009081526007602052604090205490565b60055468010000000000000000900467ffffffffffffffff1681565b60608151835114611ad8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140056029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015611af257600080fd5b50604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50905060005b8451811015611c5a57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611b4f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613eec6031913960400191505060405180910390fd5b60016000858381518110611bd457fe5b602002602001015181526020019081526020016000206000868381518110611bf857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611c4757fe5b6020908102919091010152600101611b22565b509392505050565b67ffffffffffffffff1660009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600c6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600960209081526000928352604080842090915290825290205481565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff163314611d7857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff82166000818152600d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f88ed9118615ffe36496d032760017d3855c5093cbbf7fdb20dd99a4fcc66fe6d9190a25050565b600b6020526000908152604090205481565b67ffffffffffffffff919091166000908152600e60209081526040808320938352929052205490565b60055467ffffffffffffffff1681565b67ffffffffffffffff8516600090815260066020526040902054859073ffffffffffffffffffffffffffffffffffffffff163314611ece57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b85611ed881612388565b15611f4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b848314611fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c656e677468206d69736d617463682e00000000000000000000000000000000604482015290519081900360640190fd5b60005b858110156120085761200088868684818110611fcd57fe5b90506020020135898985818110611fe057fe5b9050602002013567ffffffffffffffff1667ffffffffffffffff16612b7a565b600101611fb5565b50858560405180838360200280828437808301925050509250505060405180910390208767ffffffffffffffff167f3a3975f17a5a0bcdd6052bff8c418bfc6511822e89e2dc3e3b8c0ce07b22220e868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a350505050505050565b6120c984612388565b61213457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f746f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061213f8561303d565b336000818152600860209081526040808320898452909152812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559192508190612199908a908a908a908a908861305c565b91509150806000146121f85760006121b08361252c565b905083156121d957600083815260096020908152604080832033845290915290208190556121f6565b6000838152600a6020908152604080832033845290915290208190555b505b8261223c5767ffffffffffffffff87166000908152600b60205260409020546122219082613161565b67ffffffffffffffff88166000908152600b60205260409020555b8873ffffffffffffffffffffffffffffffffffffffff1663f242432a30338b858a8a6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b15801561230757600080fd5b505af115801561231b573d6000803e3d6000fd5b50506040805133815260208101859052815167ffffffffffffffff8c1694508c935073ffffffffffffffffffffffffffffffffffffffff8e16927f72d4fd47a9fbaff0f6860417149191d0520595c12e2f7d4828bac210e6ad3dbc928290030190a4505050505050505050565b67ffffffffffffffff166000908152600d602052604090205460ff1690565b8173ffffffffffffffffffffffffffffffffffffffff166123c66131d5565b73ffffffffffffffffffffffffffffffffffffffff161415612433576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613fad6029913960400191505060405180910390fd5b80600260006124406131d5565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556124af6131d5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b60009081526004602052604090205490565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff1633146125dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff821660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816908117909155905190917f74793e794a02a6a170c6c9946770eee45a5b771297549c7a134b186d7004f2d491a3505050565b67ffffffffffffffff166000908152600f602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b6000806126c78561303d565b905060006126d988888888888761305c565b9998505050505050505050565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61271a8487612bf5565b61275d8686868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131da92505050565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052205460ff1690565b67ffffffffffffffff8216600090815260066020526040902054829073ffffffffffffffffffffffffffffffffffffffff16331461283c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b5067ffffffffffffffff909116600090815260076020526040902055565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8116680100000000000000009182900467ffffffffffffffff908116600101908116928302919091179092556000818152600c6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89169081179091558151838152875181850152875194969594919333937f6c8e9d3264b48d81c4edda219bc448cde54bdb7997ef1703a4bc9a803167cfce938a93928392830191908501908083838e5b8381101561295d578181015183820152602001612945565b50505050905090810190601f16801561298a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a467ffffffffffffffff169392505050565b6000838152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff858116911614612a3d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f7468657227732073616c6172792067657420617474656d70742e0000000000604482015290519081900360640190fd5b612a51612a49856131d7565b848484612f5f565b50505050565b6040805160609490941b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602080860191909152603485019390935260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660548401528051808403603c018152605c9093019052815191012090565b6040805160609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b6000612b7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613392565b9392505050565b67ffffffffffffffff83166000818152600e60209081526040808320858452825280832054938352600f909152902054612bbf9190612bb99085613161565b90612b31565b67ffffffffffffffff9093166000908152600f6020908152604080832095909555600e8152848220928252919091529190912055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832085845290915290205460ff1615612c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180613f1d6030913960400191505060405180910390fd5b5050565b8151835114612cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613fd6602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f4d6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480612da2575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f756038913960400191505060405180910390fd5b60005b8351811015612e49576000848281518110612e1157fe5b602002602001015190506000848381518110612e2957fe5b60200260200101519050612e3f82898984613443565b5050600101612dfa565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ef6578181015183820152602001612ede565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612f35578181015183820152602001612f1d565b5050505090500194505050505060405180910390a4612f583386868686866134f9565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416612fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061402e6021913960400191505060405180910390fd5b612fd684848461382b565b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4612a513360008686868661388b565b67ffffffffffffffff1660009081526007602052604090205442111590565b600080600061306b85876111c2565b90506000846130935767ffffffffffffffff88166000908152600b602052604090205461309c565b61309c8761252c565b90506130a98a8a8a612a57565b935060006130b78383613a7b565b90506000866130f5576000868152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902054613126565b600086815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c1684529091529020545b61312f8761252c565b039050600061313f8b8b85613ac4565b905061314f600f82900b83613aea565b95505050505050965096945050505050565b600082820183811015612b7357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b335b90565b73ffffffffffffffffffffffffffffffffffffffff8416613246576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f4d6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851633148061329f575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b6132f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f756038913960400191505060405180910390fd5b61330083868685613443565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a4612f5833868686868661388b565b6000818484111561343b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134005781810151838201526020016133e8565b50505050905090810190601f16801561342d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461347d9082612b31565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529252808320939093558416815220546134c2908290613161565b600094855260016020908152604080872073ffffffffffffffffffffffffffffffffffffffff909516875293905291909320555050565b6135188473ffffffffffffffffffffffffffffffffffffffff16613b6c565b1561275d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156135cd5781810151838201526020016135b5565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561360c5781810151838201526020016135f4565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613648578181015183820152602001613630565b50505050905090810190601f1680156136755780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561369a57600080fd5b505af19250505080156136bf57506040513d60208110156136ba57600080fd5b505160015b613788576136cb613d83565b806136d65750613737565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156134005781810151838201526020016133e8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613e656034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014613822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e996028913960400191505060405180910390fd5b50505050505050565b6000828152600460205260409020546138449082613161565b6000928352600460209081526040808520929092556001815281842073ffffffffffffffffffffffffffffffffffffffff9590951684529390935291902080549091019055565b6138aa8473ffffffffffffffffffffffffffffffffffffffff16613b6c565b1561275d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613960578181015183820152602001613948565b50505050905090810190601f16801561398d5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139b057600080fd5b505af19250505080156139d557506040513d60208110156139d057600080fd5b505160015b6139e1576136cb613d83565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014613822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e996028913960400191505060405180910390fd5b600081613a8757600080fd5b6000613a938484613b72565b90506f7fffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff82161115612b7357600080fd5b600080613ad18585613ce8565b9050613ae1600f84900b82613d25565b95945050505050565b600081613af957506000611262565b600083600f0b1215613b0a57600080fd5b600f83900b6fffffffffffffffffffffffffffffffff8316810260401c90608084901c0277ffffffffffffffffffffffffffffffffffffffffffffffff811115613b5357600080fd5b60401b8119811115613b6457600080fd5b019392505050565b3b151590565b600081613b7e57600080fd5b600077ffffffffffffffffffffffffffffffffffffffffffffffff8411613bb45782604085901b81613bac57fe5b049050613ccb565b60c084811c6401000000008110613bcd576020918201911c5b620100008110613bdf576010918201911c5b6101008110613bf0576008918201911c5b60108110613c00576004918201911c5b60048110613c10576002918201911c5b60028110613c1f576001820191505b60bf820360018603901c6001018260ff0387901b81613c3a57fe5b0492506fffffffffffffffffffffffffffffffff831115613c5a57600080fd5b608085901c83026fffffffffffffffffffffffffffffffff8616840260c088901c604089901b82811015613c8f576001820391505b608084901b92900382811015613ca6576001820391505b829003608084901c8214613cb657fe5b888181613cbf57fe5b04870196505050505050505b6fffffffffffffffffffffffffffffffff811115612b7357600080fd5b67ffffffffffffffff82166000818152600e60209081526040808320858452825280832054938352600f909152812054909190613ae18282613a7b565b6000600f83810b9083900b0260401d7fffffffffffffffffffffffffffffffff800000000000000000000000000000008112801590613d7457506f7fffffffffffffffffffffffffffffff8113155b612b7357600080fd5b60e01c90565b600060443d1015613d93576131d7565b600481823e6308c379a0613da78251613d7d565b14613db1576131d7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715613dff57505050506131d7565b82840192508251915080821115613e1957505050506131d7565b503d83016020828401011115613e31575050506131d7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373596f752063616e277420747261646520636f6e646974696f6e616c20746f6b656e732061667465722072656465656d2e455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a2049447320616e64205f76616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a264697066735822122098d8c8fff275f9baae6ecfcded9d073f80861ebd848e42ac05a6cc159672bdfa64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102255760003560e01c8063770744481161012a578063bd85b039116100bd578063ebf38ffb1161008c578063f242432a11610071578063f242432a146110ba578063f52f368d1461115c578063f59407b41461119557610225565b8063ebf38ffb14610f89578063f23a6e6114610fe257610225565b8063bd85b03914610ec7578063c3dcfd4114610ee4578063dbc0a67514610f27578063e985e9c514610f4e57610225565b8063922aac9c116100f9578063922aac9c14610be957806392d2a6bc14610c91578063a22cb46514610cb8578063bc197c8114610cf357610225565b80637707444814610aba578063789908e914610ae1578063837b0f8414610b0e578063914b5b5914610b1657610225565b80632eb2c2d6116101bd5780634e1273f41161018c57806361fbc14a1161017157806361fbc14a14610a3d5780636695821f14610a5a57806368e22f5614610a9357610225565b80634e1273f41461087657806356c742dc146109ed57610225565b80632eb2c2d6146106365780632ef0ce781461077057806334fc81c41461082a57806347a2fd8d1461085157610225565b806305096f25116101f957806305096f25146103c65780630e89341c14610469578063150b7a02146104fb5780631f1b9c051461060357610225565b8062fdd58e1461022a57806301683b4d1461027557806301a983df1461033a57806301ffc9a714610373575b600080fd5b6102636004803603604081101561024057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111c2565b60408051918252519081900360200190f35b6103386004803603604081101561028b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156102c357600080fd5b8201836020820111156102d557600080fd5b803590602001918460018302840111640100000000831117156102f757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611268945050505050565b005b6102636004803603604081101561035057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661135b565b6103b26004803603602081101561038957600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016611378565b604080519115158252519081900360200190f35b610338600480360360808110156103dc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff604083013516919081019060808101606082013564010000000081111561042a57600080fd5b82018360208201111561043c57600080fd5b8035906020019184600183028401116401000000008311171561045e57600080fd5b5090925090506113af565b6104866004803603602081101561047f57600080fd5b50356114bd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c05781810151838201526020016104a8565b50505050905090810190601f1680156104ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105ce6004803603608081101561051157600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561055957600080fd5b82018360208201111561056b57600080fd5b8035906020019184600183028401116401000000008311171561058d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611573945050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103386004803603606081101561061957600080fd5b5067ffffffffffffffff813516906020810135906040013561159c565b610338600480360360a081101561064c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561068d57600080fd5b82018360208201111561069f57600080fd5b803590602001918460208302840111640100000000831117156106c157600080fd5b9193909290916020810190356401000000008111156106df57600080fd5b8201836020820111156106f157600080fd5b8035906020019184602083028401116401000000008311171561071357600080fd5b91939092909160208101903564010000000081111561073157600080fd5b82018360208201111561074357600080fd5b8035906020019184600183028401116401000000008311171561076557600080fd5b509092509050611704565b610338600480360360e081101561078657600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359267ffffffffffffffff60408301351692606083013592608081013582169260a08201359092169181019060e0810160c08201356401000000008111156107eb57600080fd5b8201836020820111156107fd57600080fd5b8035906020019184600183028401116401000000008311171561081f57600080fd5b5090925090506117e1565b6102636004803603602081101561084057600080fd5b503567ffffffffffffffff16611a44565b610859611a60565b6040805167ffffffffffffffff9092168252519081900360200190f35b61099d6004803603604081101561088c57600080fd5b8101906020810181356401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460208302840111640100000000831117156108db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561092b57600080fd5b82018360208201111561093d57600080fd5b8035906020019184602083028401116401000000008311171561095f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611a7c945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109d95781810151838201526020016109c1565b505050509050019250505060405180910390f35b610a1460048036036020811015610a0357600080fd5b503567ffffffffffffffff16611c62565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610a1460048036036020811015610a5357600080fd5b5035611c94565b61026360048036036040811015610a7057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611cbc565b61033860048036036020811015610aa957600080fd5b503567ffffffffffffffff16611cd9565b61026360048036036020811015610ad057600080fd5b503567ffffffffffffffff16611de4565b61026360048036036040811015610af757600080fd5b5067ffffffffffffffff8135169060200135611df6565b610859611e1f565b61033860048036036060811015610b2c57600080fd5b67ffffffffffffffff8235169190810190604081016020820135640100000000811115610b5857600080fd5b820183602082011115610b6a57600080fd5b80359060200191846020830284011164010000000083111715610b8c57600080fd5b919390929091602081019035640100000000811115610baa57600080fd5b820183602082011115610bbc57600080fd5b80359060200191846020830284011164010000000083111715610bde57600080fd5b509092509050611e2f565b610338600480360360a0811015610bff57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff6040830135169160608101359181019060a081016080820135640100000000811115610c5257600080fd5b820183602082011115610c6457600080fd5b80359060200191846001830284011164010000000083111715610c8657600080fd5b5090925090506120c0565b6103b260048036036020811015610ca757600080fd5b503567ffffffffffffffff16612388565b61033860048036036040811015610cce57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156123a7565b6105ce600480360360a0811015610d0957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691810190606081016040820135640100000000811115610d4a57600080fd5b820183602082011115610d5c57600080fd5b80359060200191846020830284011164010000000083111715610d7e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610dce57600080fd5b820183602082011115610de057600080fd5b80359060200191846020830284011164010000000083111715610e0257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610e5257600080fd5b820183602082011115610e6457600080fd5b80359060200191846001830284011164010000000083111715610e8657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612502945050505050565b61026360048036036020811015610edd57600080fd5b503561252c565b61033860048036036040811015610efa57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013567ffffffffffffffff1661253e565b61026360048036036020811015610f3d57600080fd5b503567ffffffffffffffff16612664565b6103b260048036036040811015610f6457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612680565b610263600480360360a0811015610f9f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359167ffffffffffffffff60408301351691606081013591608090910135166126bb565b6105ce600480360360a0811015610ff857600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561104557600080fd5b82018360208201111561105757600080fd5b8035906020019184600183028401116401000000008311171561107957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126e6945050505050565b610338600480360360a08110156110d057600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561111d57600080fd5b82018360208201111561112f57600080fd5b8035906020019184600183028401116401000000008311171561115157600080fd5b509092509050612710565b6103b26004803603604081101561117257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612765565b610338600480360360408110156111ab57600080fd5b5067ffffffffffffffff813516906020013561279d565b600073ffffffffffffffffffffffffffffffffffffffff8316611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613ec1602b913960400191505060405180910390fd5b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b6000611274838361285a565b9050606061128d8483683635c9adc5dea00000846129a8565b818473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8a4b99c9fa3cf87cba75b1f3dbd1fbbe020abda7a20db70cc87d922dd138c3aa866040518080602001828103825283818151815260200191508051906020019080838360005b8381101561131b578181015183820152602001611303565b50505050905090810190601f1680156113485780820380516001836020036101000a031916815260200191505b509250505060405180910390a450505050565b600a60209081526000928352604080842090915290825290205481565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b60006113bc868686612a57565b905060006113ca8787612ada565b9050600061147e6113db30846111c2565b604080517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018b9052905173ffffffffffffffffffffffffffffffffffffffff8c169162fdd58e916044808301926020929190829003018186803b15801561144c57600080fd5b505afa158015611460573d6000803e3d6000fd5b505050506040513d602081101561147657600080fd5b505190612b31565b9050600061148c30846111c2565b61149630866111c2565b83028161149f57fe5b0490506114b28989898430308c8c6117e1565b505050505050505050565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115675780601f1061153c57610100808354040283529160200191611567565b820191906000526020600020905b81548152906001019060200180831161154a57829003601f168201915b50505050509050919050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b67ffffffffffffffff8316600090815260066020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461163b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b8361164581612388565b156116b157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b6116bc858486612b7a565b604080518481529051859167ffffffffffffffff8816917f44a2b4e2bb6268fa3953b60953d3ffaca7ea60812d3a68e03fd99b6893d32f7f9181900360200190a35050505050565b60005b858110156117335761172b87878381811061171e57fe5b905060200201358a612bf5565b600101611707565b506117d7888888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250612c8392505050565b5050505050505050565b60006117ee898989612a57565b905061183284828886868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5f92505050565b600061183e8a8a612ada565b905061188285828987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5f92505050565b8573ffffffffffffffffffffffffffffffffffffffff16898b73ffffffffffffffffffffffffffffffffffffffff167fe29f51ae5c82c0500c7c66f9ab40c2f68e940a624c8ba42e287ee98eeced4e378a898989604051808581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920182900397509095505050505050a48973ffffffffffffffffffffffffffffffffffffffff1663f242432a87308c8b89896040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015611a2057600080fd5b505af1158015611a34573d6000803e3d6000fd5b5050505050505050505050505050565b67ffffffffffffffff1660009081526007602052604090205490565b60055468010000000000000000900467ffffffffffffffff1681565b60608151835114611ad8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140056029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015611af257600080fd5b50604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50905060005b8451811015611c5a57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611b4f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613eec6031913960400191505060405180910390fd5b60016000858381518110611bd457fe5b602002602001015181526020019081526020016000206000868381518110611bf857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611c4757fe5b6020908102919091010152600101611b22565b509392505050565b67ffffffffffffffff1660009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600c6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600960209081526000928352604080842090915290825290205481565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff163314611d7857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff82166000818152600d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f88ed9118615ffe36496d032760017d3855c5093cbbf7fdb20dd99a4fcc66fe6d9190a25050565b600b6020526000908152604090205481565b67ffffffffffffffff919091166000908152600e60209081526040808320938352929052205490565b60055467ffffffffffffffff1681565b67ffffffffffffffff8516600090815260066020526040902054859073ffffffffffffffffffffffffffffffffffffffff163314611ece57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b85611ed881612388565b15611f4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b848314611fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c656e677468206d69736d617463682e00000000000000000000000000000000604482015290519081900360640190fd5b60005b858110156120085761200088868684818110611fcd57fe5b90506020020135898985818110611fe057fe5b9050602002013567ffffffffffffffff1667ffffffffffffffff16612b7a565b600101611fb5565b50858560405180838360200280828437808301925050509250505060405180910390208767ffffffffffffffff167f3a3975f17a5a0bcdd6052bff8c418bfc6511822e89e2dc3e3b8c0ce07b22220e868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a350505050505050565b6120c984612388565b61213457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f746f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061213f8561303d565b336000818152600860209081526040808320898452909152812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559192508190612199908a908a908a908a908861305c565b91509150806000146121f85760006121b08361252c565b905083156121d957600083815260096020908152604080832033845290915290208190556121f6565b6000838152600a6020908152604080832033845290915290208190555b505b8261223c5767ffffffffffffffff87166000908152600b60205260409020546122219082613161565b67ffffffffffffffff88166000908152600b60205260409020555b8873ffffffffffffffffffffffffffffffffffffffff1663f242432a30338b858a8a6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b15801561230757600080fd5b505af115801561231b573d6000803e3d6000fd5b50506040805133815260208101859052815167ffffffffffffffff8c1694508c935073ffffffffffffffffffffffffffffffffffffffff8e16927f72d4fd47a9fbaff0f6860417149191d0520595c12e2f7d4828bac210e6ad3dbc928290030190a4505050505050505050565b67ffffffffffffffff166000908152600d602052604090205460ff1690565b8173ffffffffffffffffffffffffffffffffffffffff166123c66131d5565b73ffffffffffffffffffffffffffffffffffffffff161415612433576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613fad6029913960400191505060405180910390fd5b80600260006124406131d5565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556124af6131d5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b60009081526004602052604090205490565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff1633146125dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff821660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816908117909155905190917f74793e794a02a6a170c6c9946770eee45a5b771297549c7a134b186d7004f2d491a3505050565b67ffffffffffffffff166000908152600f602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b6000806126c78561303d565b905060006126d988888888888761305c565b9998505050505050505050565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61271a8487612bf5565b61275d8686868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131da92505050565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052205460ff1690565b67ffffffffffffffff8216600090815260066020526040902054829073ffffffffffffffffffffffffffffffffffffffff16331461283c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b5067ffffffffffffffff909116600090815260076020526040902055565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8116680100000000000000009182900467ffffffffffffffff908116600101908116928302919091179092556000818152600c6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89169081179091558151838152875181850152875194969594919333937f6c8e9d3264b48d81c4edda219bc448cde54bdb7997ef1703a4bc9a803167cfce938a93928392830191908501908083838e5b8381101561295d578181015183820152602001612945565b50505050905090810190601f16801561298a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a467ffffffffffffffff169392505050565b6000838152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff858116911614612a3d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f7468657227732073616c6172792067657420617474656d70742e0000000000604482015290519081900360640190fd5b612a51612a49856131d7565b848484612f5f565b50505050565b6040805160609490941b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602080860191909152603485019390935260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660548401528051808403603c018152605c9093019052815191012090565b6040805160609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b6000612b7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613392565b9392505050565b67ffffffffffffffff83166000818152600e60209081526040808320858452825280832054938352600f909152902054612bbf9190612bb99085613161565b90612b31565b67ffffffffffffffff9093166000908152600f6020908152604080832095909555600e8152848220928252919091529190912055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832085845290915290205460ff1615612c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180613f1d6030913960400191505060405180910390fd5b5050565b8151835114612cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613fd6602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f4d6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480612da2575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f756038913960400191505060405180910390fd5b60005b8351811015612e49576000848281518110612e1157fe5b602002602001015190506000848381518110612e2957fe5b60200260200101519050612e3f82898984613443565b5050600101612dfa565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ef6578181015183820152602001612ede565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612f35578181015183820152602001612f1d565b5050505090500194505050505060405180910390a4612f583386868686866134f9565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416612fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061402e6021913960400191505060405180910390fd5b612fd684848461382b565b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4612a513360008686868661388b565b67ffffffffffffffff1660009081526007602052604090205442111590565b600080600061306b85876111c2565b90506000846130935767ffffffffffffffff88166000908152600b602052604090205461309c565b61309c8761252c565b90506130a98a8a8a612a57565b935060006130b78383613a7b565b90506000866130f5576000868152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902054613126565b600086815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c1684529091529020545b61312f8761252c565b039050600061313f8b8b85613ac4565b905061314f600f82900b83613aea565b95505050505050965096945050505050565b600082820183811015612b7357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b335b90565b73ffffffffffffffffffffffffffffffffffffffff8416613246576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f4d6028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851633148061329f575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b6132f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f756038913960400191505060405180910390fd5b61330083868685613443565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a4612f5833868686868661388b565b6000818484111561343b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134005781810151838201526020016133e8565b50505050905090810190601f16801561342d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461347d9082612b31565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529252808320939093558416815220546134c2908290613161565b600094855260016020908152604080872073ffffffffffffffffffffffffffffffffffffffff909516875293905291909320555050565b6135188473ffffffffffffffffffffffffffffffffffffffff16613b6c565b1561275d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156135cd5781810151838201526020016135b5565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561360c5781810151838201526020016135f4565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613648578181015183820152602001613630565b50505050905090810190601f1680156136755780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561369a57600080fd5b505af19250505080156136bf57506040513d60208110156136ba57600080fd5b505160015b613788576136cb613d83565b806136d65750613737565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156134005781810151838201526020016133e8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613e656034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014613822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e996028913960400191505060405180910390fd5b50505050505050565b6000828152600460205260409020546138449082613161565b6000928352600460209081526040808520929092556001815281842073ffffffffffffffffffffffffffffffffffffffff9590951684529390935291902080549091019055565b6138aa8473ffffffffffffffffffffffffffffffffffffffff16613b6c565b1561275d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613960578181015183820152602001613948565b50505050905090810190601f16801561398d5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139b057600080fd5b505af19250505080156139d557506040513d60208110156139d057600080fd5b505160015b6139e1576136cb613d83565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014613822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e996028913960400191505060405180910390fd5b600081613a8757600080fd5b6000613a938484613b72565b90506f7fffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff82161115612b7357600080fd5b600080613ad18585613ce8565b9050613ae1600f84900b82613d25565b95945050505050565b600081613af957506000611262565b600083600f0b1215613b0a57600080fd5b600f83900b6fffffffffffffffffffffffffffffffff8316810260401c90608084901c0277ffffffffffffffffffffffffffffffffffffffffffffffff811115613b5357600080fd5b60401b8119811115613b6457600080fd5b019392505050565b3b151590565b600081613b7e57600080fd5b600077ffffffffffffffffffffffffffffffffffffffffffffffff8411613bb45782604085901b81613bac57fe5b049050613ccb565b60c084811c6401000000008110613bcd576020918201911c5b620100008110613bdf576010918201911c5b6101008110613bf0576008918201911c5b60108110613c00576004918201911c5b60048110613c10576002918201911c5b60028110613c1f576001820191505b60bf820360018603901c6001018260ff0387901b81613c3a57fe5b0492506fffffffffffffffffffffffffffffffff831115613c5a57600080fd5b608085901c83026fffffffffffffffffffffffffffffffff8616840260c088901c604089901b82811015613c8f576001820391505b608084901b92900382811015613ca6576001820391505b829003608084901c8214613cb657fe5b888181613cbf57fe5b04870196505050505050505b6fffffffffffffffffffffffffffffffff811115612b7357600080fd5b67ffffffffffffffff82166000818152600e60209081526040808320858452825280832054938352600f909152812054909190613ae18282613a7b565b6000600f83810b9083900b0260401d7fffffffffffffffffffffffffffffffff800000000000000000000000000000008112801590613d7457506f7fffffffffffffffffffffffffffffff8113155b612b7357600080fd5b60e01c90565b600060443d1015613d93576131d7565b600481823e6308c379a0613da78251613d7d565b14613db1576131d7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715613dff57505050506131d7565b82840192508251915080821115613e1957505050506131d7565b503d83016020828401011115613e31575050506131d7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373596f752063616e277420747261646520636f6e646974696f6e616c20746f6b656e732061667465722072656465656d2e455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a2049447320616e64205f76616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a264697066735822122098d8c8fff275f9baae6ecfcded9d073f80861ebd848e42ac05a6cc159672bdfa64736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:992:33",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:33",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "71:31:33",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:27:33",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "89:3:33",
                        "type": "",
                        "value": "224"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "94:5:33"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "85:3:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "85:15:33"
                  },
                  "variableNames": [
                    {
                      "name": "newValue",
                      "nodeType": "YulIdentifier",
                      "src": "73:8:33"
                    }
                  ]
                }
              ]
            },
            "name": "shift_right_224_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:33",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "newValue",
                "nodeType": "YulTypedName",
                "src": "58:8:33",
                "type": ""
              }
            ],
            "src": "14:88:33"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "154:836:33",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "194:9:33",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "196:5:33"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [],
                        "functionName": {
                          "name": "returndatasize",
                          "nodeType": "YulIdentifier",
                          "src": "170:14:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "170:16:33"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "188:4:33",
                        "type": "",
                        "value": "0x44"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "167:2:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:26:33"
                  },
                  "nodeType": "YulIf",
                  "src": "164:2:33"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "227:3:33"
                      },
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "232:3:33"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "237:1:33",
                        "type": "",
                        "value": "4"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "212:14:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "212:27:33"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "212:27:33"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "312:9:33",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "314:5:33"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "ret",
                                    "nodeType": "YulIdentifier",
                                    "src": "292:3:33"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "286:5:33"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "286:10:33"
                              }
                            ],
                            "functionName": {
                              "name": "shift_right_224_unsigned",
                              "nodeType": "YulIdentifier",
                              "src": "261:24:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "261:36:33"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "299:10:33",
                            "type": "",
                            "value": "0x08c379a0"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "258:2:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "258:52:33"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "251:6:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "251:60:33"
                  },
                  "nodeType": "YulIf",
                  "src": "248:2:33"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "330:21:33",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "348:2:33",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "342:5:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "342:9:33"
                  },
                  "variables": [
                    {
                      "name": "data",
                      "nodeType": "YulTypedName",
                      "src": "334:4:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "375:4:33"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "381:1:33",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "388:14:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "388:16:33"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "406:66:33",
                            "type": "",
                            "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "384:3:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "384:89:33"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "360:14:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "360:114:33"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "360:114:33"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "483:25:33",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "503:4:33"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "497:5:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "497:11:33"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "487:6:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "517:26:33",
                  "value": {
                    "arguments": [],
                    "functionName": {
                      "name": "returndatasize",
                      "nodeType": "YulIdentifier",
                      "src": "527:14:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "527:16:33"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "521:2:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "552:28:33",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "562:18:33",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "556:2:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "638:9:33",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "640:5:33"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "598:6:33"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "606:2:33"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "595:2:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "595:14:33"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "618:6:33"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "626:4:33",
                                "type": "",
                                "value": "0x24"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "614:3:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "614:17:33"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "633:2:33"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "611:2:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "611:25:33"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "592:2:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "592:45:33"
                  },
                  "nodeType": "YulIf",
                  "src": "589:2:33"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "656:28:33",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "671:4:33"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "677:6:33"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "667:3:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "667:17:33"
                  },
                  "variables": [
                    {
                      "name": "msg",
                      "nodeType": "YulTypedName",
                      "src": "660:3:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "693:24:33",
                  "value": {
                    "arguments": [
                      {
                        "name": "msg",
                        "nodeType": "YulIdentifier",
                        "src": "713:3:33"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "707:5:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "707:10:33"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "697:6:33",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "744:9:33",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "746:5:33"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "732:6:33"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "740:2:33"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "729:2:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "729:14:33"
                  },
                  "nodeType": "YulIf",
                  "src": "726:2:33"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "826:9:33",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "828:5:33"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "776:3:33"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "781:6:33"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "772:3:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "772:16:33"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "790:4:33",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "768:3:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "768:27:33"
                      },
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nodeType": "YulIdentifier",
                            "src": "801:4:33"
                          },
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "807:14:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "807:16:33"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "797:3:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "797:27:33"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "765:2:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "765:60:33"
                  },
                  "nodeType": "YulIf",
                  "src": "762:2:33"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "851:2:33",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "863:3:33"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "876:6:33"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "884:2:33",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "872:3:33"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "872:15:33"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "889:66:33",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "868:3:33"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "868:88:33"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "859:3:33"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "859:98:33"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "959:4:33",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "855:3:33"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "855:109:33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "844:6:33"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "844:121:33"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "844:121:33"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "974:10:33",
                  "value": {
                    "name": "msg",
                    "nodeType": "YulIdentifier",
                    "src": "981:3:33"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "974:3:33"
                    }
                  ]
                }
              ]
            },
            "name": "try_decode_error_message",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "146:3:33",
                "type": ""
              }
            ],
            "src": "107:883:33"
          }
        ]
      },
      "contents": "{\n    { }\n    function shift_right_224_unsigned(value) -> newValue\n    { newValue := shr(224, value) }\n    function try_decode_error_message() -> ret\n    {\n        if lt(returndatasize(), 0x44) { leave }\n        returndatacopy(ret, ret, 4)\n        if iszero(eq(shift_right_224_unsigned(mload(ret)), 0x08c379a0)) { leave }\n        let data := mload(64)\n        returndatacopy(data, 4, add(returndatasize(), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc))\n        let offset := mload(data)\n        let _1 := returndatasize()\n        let _2 := 0xffffffffffffffff\n        if or(gt(offset, _2), gt(add(offset, 0x24), _1)) { leave }\n        let msg := add(data, offset)\n        let length := mload(msg)\n        if gt(length, _2) { leave }\n        if gt(add(add(msg, length), 0x20), add(data, returndatasize())) { leave }\n        mstore(64, add(add(msg, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20))\n        ret := msg\n    }\n}",
      "id": 33,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "829:2554:4:-:0;;;1323:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1323:224:4;;;;;;;;;;-1:-1:-1;1323:224:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1323:224:4;;-1:-1:-1;1374:4:4;;-1:-1:-1;1374:4:4;;-1:-1:-1;1374:4:4;;768:40:14;-1:-1:-1;;;768:18:14;:40::i;:::-;2199:13:5;2207:4;2199:7;:13::i;:::-;2301:41;-1:-1:-1;;;2301:18:5;:41::i;:::-;2442:54;-1:-1:-1;;;2442:18:5;:54::i;:::-;-1:-1:-1;282:152:18;;-1:-1:-1;;;;282:18:18;:152::i;:::-;4753:190:1::1;-1:-1:-1::0;;;4753:18:1::1;:190::i;:::-;-1:-1:-1::0;1390:150:4::1;::::0;-1:-1:-1;;;;1390:18:4::1;:150::i;:::-;1323:224:::0;829:2554;;1499:198:14;-1:-1:-1;;;;;;1582:25:14;;;;;1574:66;;;;;-1:-1:-1;;;1574:66:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1650:33:14;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1650:40:14;1686:4;1650:40;;;1499:198::o;7807:86:5:-;7873:13;;;;:4;;:13;;;;;:::i;:::-;;7807:86;:::o;829:2554:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;829:2554:4;;;-1:-1:-1;829:2554:4;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "829:2554:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:228:5;;;;;;;;;;;;;;;;-1:-1:-1;3141:228:5;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3047:334:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3047:334:4;;-1:-1:-1;3047:334:4;;-1:-1:-1;;;;;3047:334:4:i;:::-;;4244:90:1;;;;;;;;;;;;;;;;-1:-1:-1;4244:90:1;;;;;;;;;:::i;965:140:14:-;;;;;;;;;;;;;;;;-1:-1:-1;965:140:14;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7966:1184:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7966:1184:1;;-1:-1:-1;7966:1184:1;-1:-1:-1;7966:1184:1;:::i;2902:97:5:-;;;;;;;;;;;;;;;;-1:-1:-1;2902:97:5;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;538:162:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;538:162:23;;-1:-1:-1;538:162:23;;-1:-1:-1;;;;;538:162:23:i;:::-;;;;;;;;;;;;;;;;;;;3090:348:0;;;;;;;;;;;;;;;;-1:-1:-1;3090:348:0;;;;;;;;;;;;;;:::i;13551:398:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13551:398:1;;-1:-1:-1;13551:398:1;-1:-1:-1;13551:398:1;:::i;6723:889::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6723:889:1;;-1:-1:-1;6723:889:1;-1:-1:-1;6723:889:1;:::i;14894:119::-;;;;;;;;;;;;;;;;-1:-1:-1;14894:119:1;;;;:::i;3468:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3526:631:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:5;;;;;;;;-1:-1:-1;3526:631:5;;-1:-1:-1;;3526:631:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:5;;-1:-1:-1;3526:631:5;;-1:-1:-1;;;;;3526:631:5:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14044:119:1;;;;;;;;;;;;;;;;-1:-1:-1;14044:119:1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4552:50;;;;;;;;;;;;;;;;-1:-1:-1;4552:50:1;;:::i;4045:89::-;;;;;;;;;;;;;;;;-1:-1:-1;4045:89:1;;;;;;;;;:::i;4408:174:0:-;;;;;;;;;;;;;;;;-1:-1:-1;4408:174:0;;;;:::i;4436:59:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4436:59:1;;;;:::i;2121:159:0:-;;;;;;;;;;;;;;;;-1:-1:-1;2121:159:0;;;;;;;;;:::i;3397:25:1:-;;;:::i;3672:547:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3672:547:0;;-1:-1:-1;3672:547:0;-1:-1:-1;3672:547:0;:::i;10987:1916:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10987:1916:1;;-1:-1:-1;10987:1916:1;-1:-1:-1;10987:1916:1;:::i;4712:132:0:-;;;;;;;;;;;;;;;;-1:-1:-1;4712:132:0;;;;:::i;4225:306:5:-;;;;;;;;;;;;;;;;-1:-1:-1;4225:306:5;;;;;;;;;;;:::i;366:201:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:17;;;;;;;;-1:-1:-1;366:201:17;;-1:-1:-1;;366:201:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:17;;;;;;;;-1:-1:-1;366:201:17;;-1:-1:-1;;366:201:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:17;;-1:-1:-1;366:201:17;;-1:-1:-1;;;;;366:201:17:i;1240:104:6:-;;;;;;;;;;;;;;;;-1:-1:-1;1240:104:6;;:::i;5297:220:1:-;;;;;;;;;;;;;;;;-1:-1:-1;5297:220:1;;;;;;;;;;;:::i;2481:131:0:-;;;;;;;;;;;;;;;;-1:-1:-1;2481:131:0;;;;:::i;4598:166:5:-;;;;;;;;;;;;;;;;-1:-1:-1;4598:166:5;;;;;;;;;;;:::i;9570:467:1:-;;;;;;;;;;;;;;;;-1:-1:-1;9570:467:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;187:173:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;187:173:17;;-1:-1:-1;187:173:17;;-1:-1:-1;;;;;187:173:17:i;13081:292:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13081:292:1;;-1:-1:-1;13081:292:1;-1:-1:-1;13081:292:1;:::i;14648:151::-;;;;;;;;;;;;;;;;-1:-1:-1;14648:151:1;;;;;;;;;:::i;5868:140::-;;;;;;;;;;;;;;;;-1:-1:-1;5868:140:1;;;;;;;;;:::i;3141:228:5:-;3227:7;3254:21;;;3246:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3340:13:5;;;;:9;:13;;;;;;;;:22;;;;;;;;;;;3141:228;;;;;:::o;3047:334:4:-;3131:18;3152:36;3171:9;3182:5;3152:18;:36::i;:::-;3131:57;;3198:19;3227:72;3243:9;3254:10;922:13;3292:6;3227:15;:72::i;:::-;3356:10;3345:9;3314:60;;3333:10;3314:60;;;3368:5;3314:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3047:334;;;;:::o;4244:90:1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;965:140:14:-;1065:33;;1042:4;1065:33;;;;;;;;;;;;;;965:140::o;7966:1184:1:-;8153:39;8195:93;8230:26;8258:18;8278:9;8195:34;:93::i;:::-;8153:135;;8298:30;8331:73;8357:26;8385:18;8331:25;:73::i;:::-;8298:106;;8476:19;8510:145;8603:51;8621:4;8628:25;8603:9;:51::i;:::-;8510:71;;;;;;8555:4;8510:71;;;;;;;;;;;;:36;;;;;;:71;;;;;;;;;;;;;;:36;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8510:71:1;;:75;:145::i;:::-;8476:179;;8665:15;8834:51;8852:4;8859:25;8834:9;:51::i;:::-;8759:60;8777:4;8784:34;8759:9;:60::i;:::-;8733:11;:86;:152;;;;;;8665:220;;8947:196;8967:26;9007:18;9039:9;9062:7;9091:4;9118;9137:5;;8947:6;:196::i;:::-;7966:1184;;;;;;;;;:::o;2902:97:5:-;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2956:13;;2981:11;;2988:4;;2981:11;;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2902:97;;;:::o;538:162:23:-;663:30;538:162;;;;;;:::o;3090:348:0:-;22011:26:1;;;;;;;:15;:26;;;;;;3200:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3238:9:0::1;5591:27;5608:9;5591:16;:27::i;:::-;5590:28;5582:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3313:51:::2;3330:9;3341:10;3353;3313:16;:51::i;:::-;3379:52;::::0;;;;;;;3408:10;;3379:52:::2;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;22087:1:1::1;3090:348:0::0;;;;:::o;13551:398:1:-;13773:7;13769:104;13786:16;;;13769:104;;;13824:38;13846:4;;13851:2;13846:8;;;;;;;;;;;;;13856:5;13824:21;:38::i;:::-;13804:4;;13769:104;;;;13882:60;13909:5;13916:3;13921:4;;13882:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13882:60:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13927:7:1;;-1:-1:-1;13927:7:1;;;;13882:60;;;13927:7;;13882:60;13927:7;13882:60;;;;;;;;;-1:-1:-1;;13882:60:1;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13936:5:1;;-1:-1:-1;13936:5:1;;;;13882:60;;13936:5;;;;13882:60;;;;;;;;;-1:-1:-1;13882:26:1;;-1:-1:-1;;;13882:60:1:i;:::-;13551:398;;;;;;;;:::o;6723:889::-;6967:39;7009:93;7044:26;7072:18;7092:9;7009:34;:93::i;:::-;6967:135;;7112:62;7118:3;7123:34;7159:7;7168:5;;7112:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7112:5:1;;-1:-1:-1;;;7112:62:1:i;:::-;7184:30;7217:73;7243:26;7271:18;7217:25;:73::i;:::-;7184:106;;7300:53;7306:3;7311:25;7338:7;7347:5;;7300:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7300:5:1;;-1:-1:-1;;;7300:53:1:i;:::-;7433:5;7368:92;;7413:18;7385:26;7368:92;;;7440:7;7449:3;7454:5;;7368:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7368:92:1;;-1:-1:-1;;;;;;7368:92:1;7470:26;:43;;;7514:5;7529:4;7536:18;7556:7;7565:5;;7470:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6723:889;;;;;;;;;;:::o;14894:119::-;14980:26;;14957:4;14980:26;;;:15;:26;;;;;;;14894:119::o;3468:28::-;;;;;;;;;:::o;3526:631:5:-;3699:16;3758:3;:10;3739:8;:15;:29;3731:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3825:30;3872:8;:15;3858:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3858:30:5;;3825:63;;3904:9;3899:221;3923:8;:15;3919:1;:19;3899:221;;;3990:1;3967:25;;:8;3976:1;3967:11;;;;;;;;;;;;;;:25;;;;3959:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4079:9;:17;4089:3;4093:1;4089:6;;;;;;;;;;;;;;4079:17;;;;;;;;;;;:30;4097:8;4106:1;4097:11;;;;;;;;;;;;;;4079:30;;;;;;;;;;;;;;;;4060:13;4074:1;4060:16;;;;;;;;;;;;;;;;;:49;3940:3;;3899:221;;;-1:-1:-1;4137:13:5;3526:631;-1:-1:-1;;;3526:631:5:o;14044:119:1:-;14130:26;;14104:7;14130:26;;;:15;:26;;;;;;;;;14044:119::o;4552:50::-;;;;;;;;;;;;;;;:::o;4045:89::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;4408:174:0:-;22011:26:1;;;;;;;:15;:26;;;;;;4475:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4500:28:0::1;::::0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;:35;;;::::1;4531:4;4500:35;::::0;;4550:25;::::1;::::0;4500:28;4550:25:::1;4408:174:::0;;:::o;4436:59:1:-;;;;;;;;;;;;;:::o;2121:159:0:-;2231:30;;;;;2205:7;2231:30;;;:19;:30;;;;;;;;:42;;;;;;;;;2121:159::o;3397:25:1:-;;;;;;:::o;3672:547:0:-;22011:26:1;;;;;;;:15;:26;;;;;;3811:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3849:9:0::1;5591:27;5608:9;5591:16;:27::i;:::-;5590:28;5582:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3932:40:::0;;::::2;3924:69;;;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;4008:7;4003:135;4021:23:::0;;::::2;4003:135;;;4066:61;4083:9;4094:11;;4106:2;4094:15;;;;;;;;;;;;;4111:11;;4123:2;4111:15;;;;;;;;;;;;;;;4066:61;;:16;:61::i;:::-;4046:4;;4003:135;;;;4187:11;;4152:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4176:9;4152:60;;;4200:11;;4152:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;4152:60:0;;-1:-1:-1;;;;4152:60:0::2;22087:1:1::1;3672:547:0::0;;;;;;:::o;10987:1916:1:-;11212:27;11229:9;11212:16;:27::i;:::-;11204:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11327:18;11348:26;11364:9;11348:15;:26::i;:::-;11402:10;11384:29;;;;:17;:29;;;;;;;;:41;;;;;;;;:48;;;;11428:4;11384:48;;;11327:47;;-1:-1:-1;11384:29:1;;11652:118;;11673:26;;11701:18;;11721:9;;11414:10;;11327:47;11652:20;:118::i;:::-;11573:197;;;;11986:13;12003:1;11986:18;11982:409;;12020:17;12040:47;12052:34;12040:11;:47::i;:::-;12020:67;;12105:13;12101:280;;;12138:70;;;;:34;:70;;;;;;;;12209:10;12138:82;;;;;;;:94;;;12101:280;;;12271:71;;;;:35;:71;;;;;;;;12343:10;12271:83;;;;;;;:95;;;12101:280;11982:409;;12405:13;12400:139;;12473:36;;;;;;;:25;:36;;;;;;:55;;12514:13;12473:40;:55::i;:::-;12434:36;;;;;;;:25;:36;;;;;:94;12400:139;12594:26;:43;;;12646:4;12653:10;12665:18;12685:13;12700:5;;12594:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12721:175:1;;;12849:10;12721:175;;;;;;;;;;;;;;-1:-1:-1;12794:18:1;;-1:-1:-1;12721:175:1;;;;;;;;;;;;10987:1916;;;;;;;;;:::o;4712:132:0:-;4809:28;;4786:4;4809:28;;;:17;:28;;;;;;;;;4712:132::o;4225:306:5:-;4343:8;4327:24;;:12;:10;:12::i;:::-;:24;;;;4319:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4453:8;4408:18;:32;4427:12;:10;:12::i;:::-;4408:32;;;;;;;;;;;;;;;;;;-1:-1:-1;4408:32:5;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;4491:12;:10;:12::i;:::-;4476:48;;;4515:8;4476:48;;;;;;;;;;;;;;;;;;;;4225:306;;:::o;366:201:17:-;524:36;366:201;;;;;;;:::o;1240:104:6:-;1294:7;1320:17;;;:13;:17;;;;;;;1240:104::o;5297:220:1:-;22011:26;;;;;;;:15;:26;;;;;;5384:9;;22011:40;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5405:26:::1;::::0;::::1;;::::0;;;:15:::1;:26;::::0;;;;;:44;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;5464:46;;5405:44;;5464:46:::1;::::0;::::1;5297:220:::0;;;:::o;2481:131:0:-;2573:32;;2547:7;2573:32;;;:21;:32;;;;;;;2481:131::o;4598:166:5:-;4720:27;;;;4697:4;4720:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;4598:166::o;9570:467:1:-;9781:7;9800:18;9821:26;9837:9;9821:15;:26::i;:::-;9800:47;;9860:16;9892:113;9913:26;9941:18;9961:9;9972:10;9984:5;9991:13;9892:20;:113::i;:::-;9857:148;9570:467;-1:-1:-1;;;;;;;;;9570:467:1:o;187:173:17:-;322:31;187:173;;;;;;;:::o;13081:292:1:-;13270:33;13292:3;13297:5;13270:21;:33::i;:::-;13313:53;13335:5;13342:3;13347;13352:6;13360:5;;13313:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13313:21:1;;-1:-1:-1;;;13313:53:1:i;:::-;13081:292;;;;;;:::o;14648:151::-;14756:24;;;;;14733:4;14756:24;;;:17;:24;;;;;;;;:36;;;;;;;;;;;14648:151::o;5868:140::-;22011:26;;;;;;;:15;:26;;;;;;5946:9;;22011:40;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5967:26:1::1;::::0;;::::1;;::::0;;;:15:::1;:26;::::0;;;;:34;5868:140::o;19936:307::-;20070:14;20068:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20095:27:1;;;:15;:27;;;;;;;;:39;;;;;;;;;;;;;20150:58;;;;;;;;;;;;;-1:-1:-1;;20068:16:1;;20095:39;;20167:10;;20150:58;;;;;;;;;;;;;;;;;-1:-1:-1;20150:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20219:17;;;19936:307;-1:-1:-1;;;19936:307:1:o;15332:::-;15480:27;;;;:15;:27;;;;;;:40;;;;:27;;:40;15472:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15562:70;15568:35;15593:9;15568:24;:35::i;:::-;15605:10;15617:7;15626:5;15562;:70::i;:::-;15332:307;;;;:::o;16853:290::-;17059:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17049:86;;;;;;16853:290::o;17531:252::-;17710:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17700:75;;;;;;17531:252::o;1329:134:16:-;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1406:50;1329:134;-1:-1:-1;;;1329:134:16:o;4850:305:0:-;5040:30;;;;;;;:19;:30;;;;;;;;:42;;;;;;;;;4987:32;;;:21;:32;;;;;;:96;;5040:42;4987:48;;5024:10;4987:36;:48::i;:::-;:52;;:96::i;:::-;4952:32;;;;;;;;:21;:32;;;;;;;;:131;;;;5093:19;:30;;;;;:42;;;;;;;;;;;:55;4850:305::o;17789:181:1:-;17881:24;;;;;;;:17;:24;;;;;;;;:29;;;;;;;;;;;17880:30;17872:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17789:181;;:::o;18565:921::-;18797:7;:14;18782:4;:11;:29;18774:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18881:17;;;18873:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18974:19;;;18983:10;18974:19;;:68;;-1:-1:-1;18997:25:1;;;;;;;:18;:25;;;;;;;;19023:10;18997:37;;;;;;;;;;:45;;:37;:45;18974:68;18953:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19140:10;19135:185;19161:4;:11;19156:2;:16;19135:185;;;19194:11;19208:4;19213:2;19208:8;;;;;;;;;;;;;;19194:22;;19230:14;19247:7;19255:2;19247:11;;;;;;;;;;;;;;19230:28;;19273:36;19285:3;19290:5;19297:3;19302:6;19273:11;:36::i;:::-;-1:-1:-1;;19174:4:1;;19135:185;;;;19368:3;19335:52;;19361:5;19335:52;;19349:10;19335:52;;;19373:4;19379:7;19335:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19398:81;19434:10;19446:5;19453:3;19458:4;19464:7;19473:5;19398:35;:81::i;:::-;18565:921;;;;;:::o;1509:357:6:-;1618:16;;;1610:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1683:22;1691:2;1695;1699:5;1683:7;:22::i;:::-;1720:53;;;;;;;;;;;;;;;;;;1755:1;;1735:10;;1720:53;;;;;;;;;;;1784:75;1815:10;1835:1;1839:2;1843;1847:5;1854:4;1784:30;:75::i;21532:141:1:-;21640:26;;21598:4;21640:26;;;:15;:26;;;;;;21621:15;:45;;;21532:141::o;20249:1277::-;20501:39;20542:16;20574:27;20604:28;20614:5;20621:10;20604:9;:28::i;:::-;20574:58;;20642:32;20689:13;:78;;20731:36;;;;;;;:25;:36;;;;;;20689:78;;;20705:23;20717:10;20705:11;:23::i;:::-;20642:125;;20814:93;20849:26;20877:18;20897:9;20814:34;:93::i;:::-;20777:130;;20966:19;20988:65;21007:19;21028:24;20988:18;:65::i;:::-;20966:87;;21063:28;21169:13;:207;;21298:71;;;;:35;:71;;;;;;;;:78;;;;;;;;;;;21169:207;;;21201:70;;;;:34;:70;;;;;;;;:77;;;;;;;;;;;21169:207;21106:47;21118:34;21106:11;:47::i;:::-;:271;21063:314;;21387:18;21408:52;21424:9;21435:10;21447:12;21408:15;:52::i;:::-;21387:73;-1:-1:-1;21481:38:1;:16;;;;21498:20;21481:16;:38::i;:::-;21470:49;;20249:1277;;;;;;;;;;;;;;:::o;882:176:16:-;940:7;971:5;;;994:6;;;;986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;598:104:12;685:10;598:104;;:::o;17976:583:1:-;18110:17;;;18102:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18203:19;;;18212:10;18203:19;;:68;;-1:-1:-1;18226:25:1;;;;;;;:18;:25;;;;;;;;18252:10;18226:37;;;;;;;;;;:45;;:37;:45;18203:68;18182:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:36;18376:3;18381:5;18388:3;18393:6;18364:11;:36::i;:::-;18450:3;18416:51;;18443:5;18416:51;;18431:10;18416:51;;;18455:3;18460:6;18416:51;;;;;;;;;;;;;;;;;;;;;;;;18478:74;18509:10;18521:5;18528:3;18533;18538:6;18546:5;18478:30;:74::i;1754:187:16:-;1840:7;1875:12;1867:6;;;;1859:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1910:5:16;;;1754:187::o;16162:232:1:-;16291:14;;;;:9;:14;;;;;;;;:21;;;;;;;;;;;:33;;16317:6;16291:25;:33::i;:::-;16267:14;;;;:9;:14;;;;;;;;:21;;;;;;;;;;;:57;;;;16367:19;;;;;;16356:31;;:6;;:10;:31::i;:::-;16334:14;;;;:9;:14;;;;;;;;:19;;;;;;;;;;;;;:53;-1:-1:-1;;16162:232:1:o;13494:779:5:-;13739:15;:2;:13;;;:15::i;:::-;13735:532;;;13791:2;13774:43;;;13818:8;13828:4;13834:3;13839:7;13848:4;13774:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13774:79:5;;;13770:487;;;;:::i;:::-;;;;;;;;14126:14;;;;;;;;;;;;;;;;;;;;14133:6;;14126:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;14180:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;13902:64;;;13914:52;13902:64;13898:161;;13990:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13898:161;13854:219;13494:779;;;;;;:::o;3454:250:6:-;3548:17;;;;:13;:17;;;;;;:28;;3570:5;3548:21;:28::i;:::-;3528:17;;;;:13;:17;;;;;;;;:48;;;;3606:9;:13;;;;;:17;;;;;;;;;;;;;;;;:25;;;3586:45;;3454:250::o;12746:742:5:-;12966:15;:2;:13;;;:15::i;:::-;12962:520;;;13018:2;13001:38;;;13040:8;13050:4;13056:2;13060:6;13068:4;13001:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13001:72:5;;;12997:475;;;;:::i;:::-;13122:59;;;13134:47;13122:59;13118:156;;13205:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8234:203:32;8294:6;8317;8308:16;;;;;;8330:14;8347:12;8354:1;8357;8347:5;:12::i;:::-;8330:29;-1:-1:-1;978:34:32;8374:29;;;;;8365:39;;;;;15908:248:1;16023:6;16041:19;16063:39;16080:9;16091:10;16063:16;:39::i;:::-;16041:61;-1:-1:-1;16119:30:1;:16;;;;16041:61;16119:16;:30::i;:::-;16112:37;15908:248;-1:-1:-1;;;;;15908:248:1:o;5958:455:32:-;6017:7;6036:6;6032:20;;-1:-1:-1;6051:1:32;6044:8;;6032:20;6073:1;6068;:6;;;;6059:16;;;;;;6096:11;;;;6115:34;6111:38;;6096:54;;6155:2;6095:62;;6196:3;6191:8;;;6176:24;6222:50;6216:56;;;6207:66;;;;;;6286:2;6279:9;6316:71;;6304:83;;;6295:93;;;;;;6401:7;;5958:455;-1:-1:-1;;;5958:455:32:o;726:413:28:-;1086:20;1124:8;;;726:413::o;20447:1218:32:-;20507:7;20531:6;20522:16;;;;;;20545:14;20575:50;20570:1;:55;20566:1005;;20654:1;20648:2;20643:1;:7;;20642:13;;;;;;20633:22;;20566:1005;;;20688:3;20712:8;;;20738:11;20732:17;;20728:48;;20760:2;20764:9;;;;20753;20728:48;20793:7;20787:2;:13;20783:44;;20811:2;20815:9;;;;20804;20783:44;20844:5;20838:2;:11;20834:40;;20860:1;20863:8;;;;20853;20834:40;20891:4;20885:2;:10;20881:39;;20906:1;20909:8;;;;20899;20881:39;20937:3;20931:2;:9;20927:38;;20951:1;20954:8;;;;20944;20927:38;20982:3;20976:2;:9;20972:23;;20994:1;20987:8;;;;20972:23;21081:3;21075;:9;21070:1;21066;:5;:18;;21088:1;21065:24;21057:3;21051;:9;21046:1;:14;;21045:45;;;;;;21036:54;;21117:34;21107:6;:44;;21098:54;;;;;;21189:3;21184:8;;;21174:19;;21228:34;21224:38;;21214:49;;21290:3;21285:8;;;21319:2;21314:7;;;21334;;;21330:20;;;21349:1;21343:7;;;;21330:20;21422:3;21416:9;;;;21358:8;;21437:7;;;21433:20;;;21452:1;21446:7;;;;21433:20;21461:8;;;21535:3;21529:9;;;21523:15;;21515:24;;;;21563:1;21558:2;:6;;;;;;21548:16;;;;20566:1005;;;;;;;21596:34;21586:6;:44;;21577:54;;;;;5181:318:0;5324:30;;;5285:6;5324:30;;;:19;:30;;;;;;;;:42;;;;;;;;;5399:32;;;:21;:32;;;;;;5285:6;;5324:42;5448:44;5324:42;5399:32;5448:18;:44::i;4186:197:32:-;4243:6;4273:13;:9;;;:13;;;;;4290:2;4273:19;825:35;4307:19;;;;;:42;;-1:-1:-1;978:34:32;4330:19;;;4307:42;4298:52;;;;;14:88:33;89:3;85:15;;71:31::o;107:883::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;406:66;388:16;384:89;381:1;375:4;360:114;503:4;497:11;527:16;562:18;633:2;626:4;618:6;614:17;611:25;606:2;598:6;595:14;592:45;589:2;;;640:5;;;;;;589:2;677:6;671:4;667:17;656:28;;713:3;707:10;693:24;;740:2;732:6;729:14;726:2;;;746:5;;;;;;726:2;;807:16;801:4;797:27;790:4;781:6;776:3;772:16;768:27;765:60;762:2;;;828:5;;;;;762:2;884;872:15;889:66;868:88;859:98;;959:4;855:109;851:2;844:121;863:3;-1:-1:-1;;154:836:33;:::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-or-later\npragma solidity ^0.7.1;\nimport \"./BaseBidOnAddresses.sol\";\n\n/// @title Bidding on Ethereum addresses\n/// @author Victor Porton\n/// @notice Not audited, not enough tested.\n/// This allows anyone to claim 1000 conditional tokens in order for him to transfer money from the future.\n/// See `docs/future-money.rst` and anyone to donate.\n///\n/// We have two kinds of ERC-1155 token IDs:\n/// - conditional tokens: numbers < 2**64\n/// - a combination of a collateral contract address and collateral token ID\n///   (a counter of donated amount of collateral tokens, don't confuse with collateral tokens themselves)\n///\n/// In functions of this contact `condition` is always a customer's original address.\n///\n/// We receive funds in ERC-1155, see also https://github.com/vporton/wrap-tokens\ncontract BidOnAddresses is BaseBidOnAddresses {\n    uint constant INITIAL_CUSTOMER_BALANCE = 1000 * 10**18; // an arbitrarily chosen value\n\n    /// Customer registered.\n    /// @param sender `msg.sender`.\n    /// @param customer The customer address.\n    /// @param data Additional data.\n    event CustomerRegistered(\n        address indexed sender,\n        address indexed customer,\n        uint256 indexed condition,\n        bytes data\n    );\n\n    /// @param _uri The ERC-1155 token URI.\n    constructor(string memory _uri) BaseBidOnAddresses(_uri) {\n        _registerInterface(\n            BidOnAddresses(0).onERC1155Received.selector ^\n            BidOnAddresses(0).onERC1155BatchReceived.selector\n        );\n    }\n\n    /// Anyone can register anyone.\n    ///\n    /// This can be called both before or after the oracle finish. However registering after the finish is useless.\n    ///\n    /// We check that `oracleId` exists (we don't want \"spammers\" to register themselves for a million oracles).\n    ///\n    /// We allow anyone to register anyone. This is useful for being registered by robots.\n    /// At first it seems to be harmful to make somebody a millionaire unwillingly (he then needs a fortress and bodyguards),\n    /// but: Salary tokens will be worth real money, only if the registered person publishes his works together\n    /// with his Ethereum address. So, he can be made rich against his will only by impersonating him. But if somebody\n    /// impersonates him, then they are able to present him richer than he is anyway, so making him vulnerable to\n    /// kidnappers anyway. So having somebody registered against his will seems not to be a problem at all\n    /// (except that he will see superfluous worthless tokens in Etherscan data of his account.)\n    ///\n    /// An alternative way would be to make registration gasless but requiring a registrant signature.\n    /// This is not very good, probably:\n    /// - It requires to install MetaMask.\n    /// - It bothers the person to sign something, when he could just be hesitant to get what he needs.\n    /// - It somehow complicates this contract.\n    /// @param _customer The address of the customer.\n    /// @param _data Additional data.\n    function registerCustomer(address _customer, bytes memory _data) external {\n        uint256 _condition = _doCreateCondition(_customer, _data);\n        bytes memory _data2;\n        _mintToCustomer(_customer, _condition, INITIAL_CUSTOMER_BALANCE, _data2);\n        emit CustomerRegistered(msg.sender, _customer, _condition, _data);\n    }\n}\n",
  "sourcePath": "/home/user/Projects/future-contracts/contracts/BidOnAddresses.sol",
  "ast": {
    "absolutePath": "/home/user/Projects/future-contracts/contracts/BidOnAddresses.sol",
    "exportedSymbols": {
      "ABDKMath64x64": [
        9904
      ],
      "BaseBidOnAddresses": [
        292
      ],
      "BaseLock": [
        1494
      ],
      "BidOnAddresses": [
        2297
      ],
      "SafeMath": [
        4453
      ]
    },
    "id": 2298,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2216,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:4"
      },
      {
        "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol",
        "file": "./BaseBidOnAddresses.sol",
        "id": 2217,
        "nodeType": "ImportDirective",
        "scope": 2298,
        "sourceUnit": 293,
        "src": "70:34:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2219,
              "name": "BaseBidOnAddresses",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 292,
              "src": "856:18:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseBidOnAddresses_$292",
                "typeString": "contract BaseBidOnAddresses"
              }
            },
            "id": 2220,
            "nodeType": "InheritanceSpecifier",
            "src": "856:18:4"
          }
        ],
        "contractDependencies": [
          292,
          1494,
          3318,
          3651,
          4079,
          4245,
          4257,
          4504,
          4532,
          4654,
          4669,
          4710,
          5668,
          5860
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 2218,
          "nodeType": "StructuredDocumentation",
          "src": "106:723:4",
          "text": "@title Bidding on Ethereum addresses\n @author Victor Porton\n @notice Not audited, not enough tested.\n This allows anyone to claim 1000 conditional tokens in order for him to transfer money from the future.\n See `docs/future-money.rst` and anyone to donate.\n We have two kinds of ERC-1155 token IDs:\n - conditional tokens: numbers < 2**64\n - a combination of a collateral contract address and collateral token ID\n   (a counter of donated amount of collateral tokens, don't confuse with collateral tokens themselves)\n In functions of this contact `condition` is always a customer's original address.\n We receive funds in ERC-1155, see also https://github.com/vporton/wrap-tokens"
        },
        "fullyImplemented": true,
        "id": 2297,
        "linearizedBaseContracts": [
          2297,
          292,
          1494,
          5668,
          5860,
          4504,
          4532,
          4710,
          3651,
          3318,
          4669,
          4654,
          4245,
          4257,
          4079
        ],
        "name": "BidOnAddresses",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 2227,
            "mutability": "constant",
            "name": "INITIAL_CUSTOMER_BALANCE",
            "nodeType": "VariableDeclaration",
            "scope": 2297,
            "src": "881:54:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 2221,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "881:4:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000000"
              },
              "id": 2226,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "31303030",
                "id": 2222,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "922:4:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1000_by_1",
                  "typeString": "int_const 1000"
                },
                "value": "1000"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "commonType": {
                  "typeIdentifier": "t_rational_1000000000000000000_by_1",
                  "typeString": "int_const 1000000000000000000"
                },
                "id": 2225,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "hexValue": "3130",
                  "id": 2223,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "929:2:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_10_by_1",
                    "typeString": "int_const 10"
                  },
                  "value": "10"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "hexValue": "3138",
                  "id": 2224,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "933:2:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_18_by_1",
                    "typeString": "int_const 18"
                  },
                  "value": "18"
                },
                "src": "929:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1000000000000000000_by_1",
                  "typeString": "int_const 1000000000000000000"
                }
              },
              "src": "922:13:4",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000000"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2228,
              "nodeType": "StructuredDocumentation",
              "src": "973:143:4",
              "text": "Customer registered.\n @param sender `msg.sender`.\n @param customer The customer address.\n @param data Additional data."
            },
            "id": 2238,
            "name": "CustomerRegistered",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2230,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2238,
                  "src": "1155:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2229,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1155:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2232,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2238,
                  "src": "1187:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2231,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1187:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2234,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "condition",
                  "nodeType": "VariableDeclaration",
                  "scope": 2238,
                  "src": "1221:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1221:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2236,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2238,
                  "src": "1256:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2235,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1256:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1145:127:4"
            },
            "src": "1121:152:4"
          },
          {
            "body": {
              "id": 2261,
              "nodeType": "Block",
              "src": "1380:167:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 2258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2249,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1437:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2248,
                                "name": "BidOnAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2297,
                                "src": "1422:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BidOnAddresses_$2297_$",
                                  "typeString": "type(contract BidOnAddresses)"
                                }
                              },
                              "id": 2250,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1422:17:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BidOnAddresses_$2297",
                                "typeString": "contract BidOnAddresses"
                              }
                            },
                            "id": 2251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "onERC1155Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4480,
                            "src": "1422:35:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                            }
                          },
                          "id": 2252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "src": "1422:44:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "^",
                        "rightExpression": {
                          "expression": {
                            "expression": {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2254,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1496:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2253,
                                "name": "BidOnAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2297,
                                "src": "1481:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BidOnAddresses_$2297_$",
                                  "typeString": "type(contract BidOnAddresses)"
                                }
                              },
                              "id": 2255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1481:17:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BidOnAddresses_$2297",
                                "typeString": "contract BidOnAddresses"
                              }
                            },
                            "id": 2256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "onERC1155BatchReceived",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4503,
                            "src": "1481:40:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                            }
                          },
                          "id": 2257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "selector",
                          "nodeType": "MemberAccess",
                          "src": "1481:49:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1422:108:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 2247,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4244,
                      "src": "1390:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 2259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1390:150:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2260,
                  "nodeType": "ExpressionStatement",
                  "src": "1390:150:4"
                }
              ]
            },
            "documentation": {
              "id": 2239,
              "nodeType": "StructuredDocumentation",
              "src": "1279:39:4",
              "text": "@param _uri The ERC-1155 token URI."
            },
            "id": 2262,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 2244,
                    "name": "_uri",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2241,
                    "src": "1374:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 2245,
                "modifierName": {
                  "id": 2243,
                  "name": "BaseBidOnAddresses",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 292,
                  "src": "1355:18:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseBidOnAddresses_$292_$",
                    "typeString": "type(contract BaseBidOnAddresses)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1355:24:4"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2241,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 2262,
                  "src": "1335:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2240,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1335:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1334:20:4"
            },
            "returnParameters": {
              "id": 2246,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1380:0:4"
            },
            "scope": 2297,
            "src": "1323:224:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2295,
              "nodeType": "Block",
              "src": "3121:260:4",
              "statements": [
                {
                  "assignments": [
                    2271
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2271,
                      "mutability": "mutable",
                      "name": "_condition",
                      "nodeType": "VariableDeclaration",
                      "scope": 2295,
                      "src": "3131:18:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2270,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3131:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2276,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2273,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2265,
                        "src": "3171:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2274,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2267,
                        "src": "3182:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2272,
                      "name": "_doCreateCondition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1345,
                      "src": "3152:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes memory) returns (uint256)"
                      }
                    },
                    "id": 2275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3152:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3131:57:4"
                },
                {
                  "assignments": [
                    2278
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2278,
                      "mutability": "mutable",
                      "name": "_data2",
                      "nodeType": "VariableDeclaration",
                      "scope": 2295,
                      "src": "3198:19:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2277,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3198:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2279,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3198:19:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2281,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2265,
                        "src": "3243:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2282,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2271,
                        "src": "3254:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2283,
                        "name": "INITIAL_CUSTOMER_BALANCE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2227,
                        "src": "3266:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2284,
                        "name": "_data2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2278,
                        "src": "3292:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2280,
                      "name": "_mintToCustomer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 970,
                      "src": "3227:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 2285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3227:72:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2286,
                  "nodeType": "ExpressionStatement",
                  "src": "3227:72:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2288,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "3333:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3333:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 2290,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2265,
                        "src": "3345:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2291,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2271,
                        "src": "3356:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2292,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2267,
                        "src": "3368:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2287,
                      "name": "CustomerRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2238,
                      "src": "3314:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 2293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3314:60:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2294,
                  "nodeType": "EmitStatement",
                  "src": "3309:65:4"
                }
              ]
            },
            "documentation": {
              "id": 2263,
              "nodeType": "StructuredDocumentation",
              "src": "1553:1489:4",
              "text": "Anyone can register anyone.\n This can be called both before or after the oracle finish. However registering after the finish is useless.\n We check that `oracleId` exists (we don't want \"spammers\" to register themselves for a million oracles).\n We allow anyone to register anyone. This is useful for being registered by robots.\n At first it seems to be harmful to make somebody a millionaire unwillingly (he then needs a fortress and bodyguards),\n but: Salary tokens will be worth real money, only if the registered person publishes his works together\n with his Ethereum address. So, he can be made rich against his will only by impersonating him. But if somebody\n impersonates him, then they are able to present him richer than he is anyway, so making him vulnerable to\n kidnappers anyway. So having somebody registered against his will seems not to be a problem at all\n (except that he will see superfluous worthless tokens in Etherscan data of his account.)\n An alternative way would be to make registration gasless but requiring a registrant signature.\n This is not very good, probably:\n - It requires to install MetaMask.\n - It bothers the person to sign something, when he could just be hesitant to get what he needs.\n - It somehow complicates this contract.\n @param _customer The address of the customer.\n @param _data Additional data."
            },
            "functionSelector": "01683b4d",
            "id": 2296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "registerCustomer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2265,
                  "mutability": "mutable",
                  "name": "_customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2296,
                  "src": "3073:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2264,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3073:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2267,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2296,
                  "src": "3092:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2266,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3092:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3072:39:4"
            },
            "returnParameters": {
              "id": 2269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3121:0:4"
            },
            "scope": 2297,
            "src": "3047:334:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 2298,
        "src": "829:2554:4"
      }
    ],
    "src": "46:3338:4"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/user/Projects/future-contracts/contracts/BidOnAddresses.sol",
      "exportedSymbols": {
        "ABDKMath64x64": [
          9904
        ],
        "BaseBidOnAddresses": [
          292
        ],
        "BaseLock": [
          1494
        ],
        "BidOnAddresses": [
          2297
        ],
        "SafeMath": [
          4453
        ]
      },
      "license": "LGPL-3.0-or-later"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".1"
          ]
        },
        "id": 2216,
        "name": "PragmaDirective",
        "src": "46:23:4"
      },
      {
        "attributes": {
          "SourceUnit": 293,
          "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol",
          "file": "./BaseBidOnAddresses.sol",
          "scope": 2298,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 2217,
        "name": "ImportDirective",
        "src": "70:34:4"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            292,
            1494,
            3318,
            3651,
            4079,
            4245,
            4257,
            4504,
            4532,
            4654,
            4669,
            4710,
            5668,
            5860
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2297,
            292,
            1494,
            5668,
            5860,
            4504,
            4532,
            4710,
            3651,
            3318,
            4669,
            4654,
            4245,
            4257,
            4079
          ],
          "name": "BidOnAddresses",
          "scope": 2298
        },
        "children": [
          {
            "attributes": {
              "text": "@title Bidding on Ethereum addresses\n @author Victor Porton\n @notice Not audited, not enough tested.\n This allows anyone to claim 1000 conditional tokens in order for him to transfer money from the future.\n See `docs/future-money.rst` and anyone to donate.\n We have two kinds of ERC-1155 token IDs:\n - conditional tokens: numbers < 2**64\n - a combination of a collateral contract address and collateral token ID\n   (a counter of donated amount of collateral tokens, don't confuse with collateral tokens themselves)\n In functions of this contact `condition` is always a customer's original address.\n We receive funds in ERC-1155, see also https://github.com/vporton/wrap-tokens"
            },
            "id": 2218,
            "name": "StructuredDocumentation",
            "src": "106:723:4"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "BaseBidOnAddresses",
                  "referencedDeclaration": 292,
                  "type": "contract BaseBidOnAddresses"
                },
                "id": 2219,
                "name": "UserDefinedTypeName",
                "src": "856:18:4"
              }
            ],
            "id": 2220,
            "name": "InheritanceSpecifier",
            "src": "856:18:4"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "INITIAL_CUSTOMER_BALANCE",
              "scope": 2297,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint",
                  "type": "uint256"
                },
                "id": 2221,
                "name": "ElementaryTypeName",
                "src": "881:4:4"
              },
              {
                "attributes": {
                  "commonType": {
                    "typeIdentifier": "t_rational_1000000000000000000000_by_1",
                    "typeString": "int_const 1000000000000000000000"
                  },
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "operator": "*",
                  "type": "int_const 1000000000000000000000"
                },
                "children": [
                  {
                    "attributes": {
                      "hexvalue": "31303030",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "token": "number",
                      "type": "int_const 1000",
                      "value": "1000"
                    },
                    "id": 2222,
                    "name": "Literal",
                    "src": "922:4:4"
                  },
                  {
                    "attributes": {
                      "commonType": {
                        "typeIdentifier": "t_rational_1000000000000000000_by_1",
                        "typeString": "int_const 1000000000000000000"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "**",
                      "type": "int_const 1000000000000000000"
                    },
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "3130",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 10",
                          "value": "10"
                        },
                        "id": 2223,
                        "name": "Literal",
                        "src": "929:2:4"
                      },
                      {
                        "attributes": {
                          "hexvalue": "3138",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "number",
                          "type": "int_const 18",
                          "value": "18"
                        },
                        "id": 2224,
                        "name": "Literal",
                        "src": "933:2:4"
                      }
                    ],
                    "id": 2225,
                    "name": "BinaryOperation",
                    "src": "929:6:4"
                  }
                ],
                "id": 2226,
                "name": "BinaryOperation",
                "src": "922:13:4"
              }
            ],
            "id": 2227,
            "name": "VariableDeclaration",
            "src": "881:54:4"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "CustomerRegistered"
            },
            "children": [
              {
                "attributes": {
                  "text": "Customer registered.\n @param sender `msg.sender`.\n @param customer The customer address.\n @param data Additional data."
                },
                "id": 2228,
                "name": "StructuredDocumentation",
                "src": "973:143:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "sender",
                      "scope": 2238,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2229,
                        "name": "ElementaryTypeName",
                        "src": "1155:7:4"
                      }
                    ],
                    "id": 2230,
                    "name": "VariableDeclaration",
                    "src": "1155:22:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "customer",
                      "scope": 2238,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2231,
                        "name": "ElementaryTypeName",
                        "src": "1187:7:4"
                      }
                    ],
                    "id": 2232,
                    "name": "VariableDeclaration",
                    "src": "1187:24:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "condition",
                      "scope": 2238,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2233,
                        "name": "ElementaryTypeName",
                        "src": "1221:7:4"
                      }
                    ],
                    "id": 2234,
                    "name": "VariableDeclaration",
                    "src": "1221:25:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "data",
                      "scope": 2238,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2235,
                        "name": "ElementaryTypeName",
                        "src": "1256:5:4"
                      }
                    ],
                    "id": 2236,
                    "name": "VariableDeclaration",
                    "src": "1256:10:4"
                  }
                ],
                "id": 2237,
                "name": "ParameterList",
                "src": "1145:127:4"
              }
            ],
            "id": 2238,
            "name": "EventDefinition",
            "src": "1121:152:4"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 2297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@param _uri The ERC-1155 token URI."
                },
                "id": 2239,
                "name": "StructuredDocumentation",
                "src": "1279:39:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_uri",
                      "scope": 2262,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 2240,
                        "name": "ElementaryTypeName",
                        "src": "1335:6:4"
                      }
                    ],
                    "id": 2241,
                    "name": "VariableDeclaration",
                    "src": "1335:18:4"
                  }
                ],
                "id": 2242,
                "name": "ParameterList",
                "src": "1334:20:4"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2246,
                "name": "ParameterList",
                "src": "1380:0:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 292,
                      "type": "type(contract BaseBidOnAddresses)",
                      "value": "BaseBidOnAddresses"
                    },
                    "id": 2243,
                    "name": "Identifier",
                    "src": "1355:18:4"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2241,
                      "type": "string memory",
                      "value": "_uri"
                    },
                    "id": 2244,
                    "name": "Identifier",
                    "src": "1374:4:4"
                  }
                ],
                "id": 2245,
                "name": "ModifierInvocation",
                "src": "1355:24:4"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4244,
                              "type": "function (bytes4)",
                              "value": "_registerInterface"
                            },
                            "id": 2247,
                            "name": "Identifier",
                            "src": "1390:18:4"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "operator": "^",
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "onERC1155Received",
                                      "referencedDeclaration": 4480,
                                      "type": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract BidOnAddresses",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2297,
                                              "type": "type(contract BidOnAddresses)",
                                              "value": "BidOnAddresses"
                                            },
                                            "id": 2248,
                                            "name": "Identifier",
                                            "src": "1422:14:4"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 2249,
                                            "name": "Literal",
                                            "src": "1437:1:4"
                                          }
                                        ],
                                        "id": 2250,
                                        "name": "FunctionCall",
                                        "src": "1422:17:4"
                                      }
                                    ],
                                    "id": 2251,
                                    "name": "MemberAccess",
                                    "src": "1422:35:4"
                                  }
                                ],
                                "id": 2252,
                                "name": "MemberAccess",
                                "src": "1422:44:4"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "onERC1155BatchReceived",
                                      "referencedDeclaration": 4503,
                                      "type": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract BidOnAddresses",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2297,
                                              "type": "type(contract BidOnAddresses)",
                                              "value": "BidOnAddresses"
                                            },
                                            "id": 2253,
                                            "name": "Identifier",
                                            "src": "1481:14:4"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 2254,
                                            "name": "Literal",
                                            "src": "1496:1:4"
                                          }
                                        ],
                                        "id": 2255,
                                        "name": "FunctionCall",
                                        "src": "1481:17:4"
                                      }
                                    ],
                                    "id": 2256,
                                    "name": "MemberAccess",
                                    "src": "1481:40:4"
                                  }
                                ],
                                "id": 2257,
                                "name": "MemberAccess",
                                "src": "1481:49:4"
                              }
                            ],
                            "id": 2258,
                            "name": "BinaryOperation",
                            "src": "1422:108:4"
                          }
                        ],
                        "id": 2259,
                        "name": "FunctionCall",
                        "src": "1390:150:4"
                      }
                    ],
                    "id": 2260,
                    "name": "ExpressionStatement",
                    "src": "1390:150:4"
                  }
                ],
                "id": 2261,
                "name": "Block",
                "src": "1380:167:4"
              }
            ],
            "id": 2262,
            "name": "FunctionDefinition",
            "src": "1323:224:4"
          },
          {
            "attributes": {
              "functionSelector": "01683b4d",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "registerCustomer",
              "scope": 2297,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "Anyone can register anyone.\n This can be called both before or after the oracle finish. However registering after the finish is useless.\n We check that `oracleId` exists (we don't want \"spammers\" to register themselves for a million oracles).\n We allow anyone to register anyone. This is useful for being registered by robots.\n At first it seems to be harmful to make somebody a millionaire unwillingly (he then needs a fortress and bodyguards),\n but: Salary tokens will be worth real money, only if the registered person publishes his works together\n with his Ethereum address. So, he can be made rich against his will only by impersonating him. But if somebody\n impersonates him, then they are able to present him richer than he is anyway, so making him vulnerable to\n kidnappers anyway. So having somebody registered against his will seems not to be a problem at all\n (except that he will see superfluous worthless tokens in Etherscan data of his account.)\n An alternative way would be to make registration gasless but requiring a registrant signature.\n This is not very good, probably:\n - It requires to install MetaMask.\n - It bothers the person to sign something, when he could just be hesitant to get what he needs.\n - It somehow complicates this contract.\n @param _customer The address of the customer.\n @param _data Additional data."
                },
                "id": 2263,
                "name": "StructuredDocumentation",
                "src": "1553:1489:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_customer",
                      "scope": 2296,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2264,
                        "name": "ElementaryTypeName",
                        "src": "3073:7:4"
                      }
                    ],
                    "id": 2265,
                    "name": "VariableDeclaration",
                    "src": "3073:17:4"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 2296,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2266,
                        "name": "ElementaryTypeName",
                        "src": "3092:5:4"
                      }
                    ],
                    "id": 2267,
                    "name": "VariableDeclaration",
                    "src": "3092:18:4"
                  }
                ],
                "id": 2268,
                "name": "ParameterList",
                "src": "3072:39:4"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2269,
                "name": "ParameterList",
                "src": "3121:0:4"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2271
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_condition",
                          "scope": 2295,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2270,
                            "name": "ElementaryTypeName",
                            "src": "3131:7:4"
                          }
                        ],
                        "id": 2271,
                        "name": "VariableDeclaration",
                        "src": "3131:18:4"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1345,
                              "type": "function (address,bytes memory) returns (uint256)",
                              "value": "_doCreateCondition"
                            },
                            "id": 2272,
                            "name": "Identifier",
                            "src": "3152:18:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2265,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2273,
                            "name": "Identifier",
                            "src": "3171:9:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 2274,
                            "name": "Identifier",
                            "src": "3182:5:4"
                          }
                        ],
                        "id": 2275,
                        "name": "FunctionCall",
                        "src": "3152:36:4"
                      }
                    ],
                    "id": 2276,
                    "name": "VariableDeclarationStatement",
                    "src": "3131:57:4"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2278
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_data2",
                          "scope": 2295,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 2277,
                            "name": "ElementaryTypeName",
                            "src": "3198:5:4"
                          }
                        ],
                        "id": 2278,
                        "name": "VariableDeclaration",
                        "src": "3198:19:4"
                      }
                    ],
                    "id": 2279,
                    "name": "VariableDeclarationStatement",
                    "src": "3198:19:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 970,
                              "type": "function (address,uint256,uint256,bytes memory)",
                              "value": "_mintToCustomer"
                            },
                            "id": 2280,
                            "name": "Identifier",
                            "src": "3227:15:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2265,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2281,
                            "name": "Identifier",
                            "src": "3243:9:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2271,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 2282,
                            "name": "Identifier",
                            "src": "3254:10:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2227,
                              "type": "uint256",
                              "value": "INITIAL_CUSTOMER_BALANCE"
                            },
                            "id": 2283,
                            "name": "Identifier",
                            "src": "3266:24:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2278,
                              "type": "bytes memory",
                              "value": "_data2"
                            },
                            "id": 2284,
                            "name": "Identifier",
                            "src": "3292:6:4"
                          }
                        ],
                        "id": 2285,
                        "name": "FunctionCall",
                        "src": "3227:72:4"
                      }
                    ],
                    "id": 2286,
                    "name": "ExpressionStatement",
                    "src": "3227:72:4"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2238,
                              "type": "function (address,address,uint256,bytes memory)",
                              "value": "CustomerRegistered"
                            },
                            "id": 2287,
                            "name": "Identifier",
                            "src": "3314:18:4"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2288,
                                "name": "Identifier",
                                "src": "3333:3:4"
                              }
                            ],
                            "id": 2289,
                            "name": "MemberAccess",
                            "src": "3333:10:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2265,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2290,
                            "name": "Identifier",
                            "src": "3345:9:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2271,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 2291,
                            "name": "Identifier",
                            "src": "3356:10:4"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2267,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 2292,
                            "name": "Identifier",
                            "src": "3368:5:4"
                          }
                        ],
                        "id": 2293,
                        "name": "FunctionCall",
                        "src": "3314:60:4"
                      }
                    ],
                    "id": 2294,
                    "name": "EmitStatement",
                    "src": "3309:65:4"
                  }
                ],
                "id": 2295,
                "name": "Block",
                "src": "3121:260:4"
              }
            ],
            "id": 2296,
            "name": "FunctionDefinition",
            "src": "3047:334:4"
          }
        ],
        "id": 2297,
        "name": "ContractDefinition",
        "src": "829:2554:4"
      }
    ],
    "id": 2298,
    "name": "SourceUnit",
    "src": "46:3338:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-06-09T23:19:50.208Z",
  "devdoc": {
    "author": "Victor Porton",
    "events": {
      "CustomerRegistered(address,address,uint256,bytes)": {
        "params": {
          "customer": "The customer address.",
          "data": "Additional data.",
          "sender": "`msg.sender`."
        }
      }
    },
    "kind": "dev",
    "methods": {
      "balanceOf(address,uint256)": {
        "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address."
      },
      "balanceOfBatch(address[],uint256[])": {
        "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length."
      },
      "changeOracleOwner(address,uint64)": {
        "params": {
          "_newOracleOwner": "New owner.",
          "_oracleId": "The oracle whose owner to change."
        }
      },
      "collateralOwing(address,uint256,uint64,uint256,address)": {
        "params": {
          "_collateralContractAddress": "The ERC-1155 collateral token contract.",
          "_collateralTokenId": "The ERC-1155 collateral token ID.",
          "_condition": "The condition (the original receiver of a conditional token).",
          "_oracleId": "From which oracle's \"account\" to withdraw.",
          "_user": "The user to which we may owe."
        }
      },
      "constructor": {
        "params": {
          "_uri": "The ERC-1155 token URI."
        }
      },
      "donate(address,uint256,uint64,uint256,address,address,bytes)": {
        "params": {
          "_amount": "The amount to donate.",
          "_collateralContractAddress": "The collateral ERC-1155 contract address.",
          "_collateralTokenId": "The collateral ERC-1155 token ID.",
          "_data": "Additional transaction data.",
          "_from": "From whom to take the donation.",
          "_oracleId": "The oracle ID to whose ecosystem to donate to.",
          "_to": "On whose account the donation amount is assigned."
        }
      },
      "finishOracle(uint64)": {
        "params": {
          "_oracleId": "The oracle ID. You should set grace period end time before calling this method."
        }
      },
      "gatherDeFiProfit(address,uint256,uint64,bytes)": {
        "params": {
          "_collateralContractAddress": "The collateral ERC-1155 contract address.",
          "_collateralTokenId": "The collateral ERC-1155 token ID.",
          "_data": "Additional transaction data.",
          "_oracleId": "The oracle ID to whose ecosystem to donate to."
        }
      },
      "gracePeriodEnd(uint64)": {
        "params": {
          "_oracleId": "For which oracle."
        }
      },
      "isApprovedForAll(address,address)": {
        "details": "See {IERC1155-isApprovedForAll}."
      },
      "isConditionalLocked(address,uint256)": {
        "params": {
          "_condition": "The condition (the original receiver of a conditional token).",
          "_user": "Querying if locked for this user."
        }
      },
      "isOracleFinished(uint64)": {
        "params": {
          "_oracleId": "The oracle ID."
        },
        "returns": {
          "_0": "`true` if it has finished."
        }
      },
      "onERC721Received(address,address,uint256,bytes)": {
        "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`."
      },
      "oracleOwner(uint64)": {
        "params": {
          "_oracleId": "The oracle ID."
        }
      },
      "payoutDenominator(uint64)": {
        "params": {
          "_oracleId": "The oracle ID. The result can't change if the oracle has finished."
        }
      },
      "payoutNumerator(uint64,uint256)": {
        "params": {
          "_condition": "The condition (the original receiver of a conditional token). The result can't change if the oracle has finished.",
          "_oracleId": "The oracle ID."
        }
      },
      "registerCustomer(address,bytes)": {
        "params": {
          "_customer": "The address of the customer.",
          "_data": "Additional data."
        }
      },
      "reportNumerator(uint64,uint256,uint256)": {
        "params": {
          "_condition": "The condition.",
          "_numerator": "The relative score of the condition. Note: We could make oracles easily verificable by a hash of all the data, but       - It may need allowing to set a numerator only once.       - It may be not necessary because future technology will allow to aggregate blockchains.",
          "_oracleId": "The oracle ID."
        }
      },
      "reportNumeratorsBatch(uint64,uint64[],uint256[])": {
        "params": {
          "_conditions": "The conditions.",
          "_numerators": "The relative scores of the condition.",
          "_oracleId": "The oracle ID."
        }
      },
      "setApprovalForAll(address,bool)": {
        "details": "See {IERC1155-setApprovalForAll}."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas."
      },
      "totalSupply(uint256)": {
        "params": {
          "id": "Token ID."
        },
        "returns": {
          "_0": "Total supply."
        }
      },
      "uri(uint256)": {
        "details": "See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\{id\\}` substring with the actual token type ID."
      },
      "withdrawCollateral(address,uint256,uint64,uint256,bytes)": {
        "params": {
          "_collateralContractAddress": "The ERC-1155 collateral token contract.",
          "_collateralTokenId": "The ERC-1155 collateral token ID.",
          "_condition": "The condition.",
          "_data": "Additional data. Notes: - It is made impossible to withdraw somebody's other collateral, as otherwise we can't mark non-active   accounts in grace period. - We can't transfer to somebody other than `msg.sender` because anybody can transfer   (needed for multi-level transfers). - After this function is called, it becomes impossible to transfer the corresponding conditional token   of `msg.sender` (to prevent its repeated withdrawal).",
          "_oracleId": "From which oracle's \"account\" to withdraw."
        }
      }
    },
    "title": "Bidding on Ethereum addresses",
    "version": 1
  },
  "userdoc": {
    "events": {
      "CollateralWithdrawn(address,uint256,uint64,address,uint256)": {
        "notice": "Emitted when collateral is withdrawn."
      },
      "ConditionCreated(address,address,uint256,bytes)": {
        "notice": "Emitted when an oracle owner is set."
      },
      "CustomerRegistered(address,address,uint256,bytes)": {
        "notice": "Customer registered."
      },
      "DonateCollateral(address,uint256,address,uint256,address,bytes)": {
        "notice": "Emitted when a collateral is donated."
      },
      "OracleCreated(address,uint64)": {
        "notice": "Emitted when an oracle is created."
      },
      "OracleFinished(uint64)": {
        "notice": "Emitted when an oracle is marked as having finished its work."
      },
      "OracleOwnerChanged(address,uint64)": {
        "notice": "Emitted when an oracle owner is set."
      },
      "ReportedNumerator(uint64,uint256,uint256)": {
        "notice": "A condition score was stored in the chain by an oracle."
      },
      "ReportedNumeratorsBatch(uint64,uint64[],uint256[])": {
        "notice": "Some condition scores were stored in the chain by an oracle."
      }
    },
    "kind": "user",
    "methods": {
      "changeOracleOwner(address,uint64)": {
        "notice": "Modify the owner of an oracle."
      },
      "collateralOwing(address,uint256,uint64,uint256,address)": {
        "notice": "Calculate how much collateral is owed to a user."
      },
      "donate(address,uint256,uint64,uint256,address,address,bytes)": {
        "notice": "Donate funds in an ERC-1155 token. First, the collateral token need to be approved to be spent by this contract from the address `_from`. It also mints a token (with a different ID), that counts donations in that token."
      },
      "finishOracle(uint64)": {
        "notice": "Need to be called after all numerators were reported."
      },
      "gatherDeFiProfit(address,uint256,uint64,bytes)": {
        "notice": "Gather a DeFi profit of a token previous donated to this contact."
      },
      "gracePeriodEnd(uint64)": {
        "notice": "Retrieve the end of the grace period."
      },
      "isConditionalLocked(address,uint256)": {
        "notice": "Are transfers of a conditinal token locked? This is used to prevent its repeated withdrawal."
      },
      "isOracleFinished(uint64)": {
        "notice": "Check if an oracle has finished."
      },
      "oracleOwner(uint64)": {
        "notice": "Get the oracle owner."
      },
      "payoutDenominator(uint64)": {
        "notice": "Retrieve the last stored payout denominator (the sum of all numerators of the oracle)."
      },
      "payoutNumerator(uint64,uint256)": {
        "notice": "Retrieve the last stored payout numerator (relative score of a condition)."
      },
      "registerCustomer(address,bytes)": {
        "notice": "Anyone can register anyone. This can be called both before or after the oracle finish. However registering after the finish is useless. We check that `oracleId` exists (we don't want \"spammers\" to register themselves for a million oracles). We allow anyone to register anyone. This is useful for being registered by robots. At first it seems to be harmful to make somebody a millionaire unwillingly (he then needs a fortress and bodyguards), but: Salary tokens will be worth real money, only if the registered person publishes his works together with his Ethereum address. So, he can be made rich against his will only by impersonating him. But if somebody impersonates him, then they are able to present him richer than he is anyway, so making him vulnerable to kidnappers anyway. So having somebody registered against his will seems not to be a problem at all (except that he will see superfluous worthless tokens in Etherscan data of his account.) An alternative way would be to make registration gasless but requiring a registrant signature. This is not very good, probably: - It requires to install MetaMask. - It bothers the person to sign something, when he could just be hesitant to get what he needs. - It somehow complicates this contract."
      },
      "reportNumerator(uint64,uint256,uint256)": {
        "notice": "Called by the oracle owner for reporting results of conditions."
      },
      "reportNumeratorsBatch(uint64,uint64[],uint256[])": {
        "notice": "Called by the oracle owner for reporting results of several conditions."
      },
      "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
        "notice": "An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \"gathering\" them before redeeming each oracle."
      },
      "safeTransferFrom(address,address,uint256,uint256,bytes)": {
        "notice": "An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \"gathering\" them before redeeming each oracle."
      },
      "totalSupply(uint256)": {
        "notice": "Total supply of a token (conforms to `IERC1155Views`)."
      },
      "updateGracePeriodEnds(uint64,uint256)": {
        "notice": "Set the end time of the grace period. The first withdrawal can be done *only* during the grace period. The second withdrawal can be done after the end of the grace period and only if the first withdrawal was done. The intention of the grace period is to check which of users are active (\"alive\")."
      },
      "usersWithdrewInFirstRound(uint64)": {
        "notice": "Mapping (oracleId => amount user withdrew in first round) (see `docs/Calculations.md`)."
      },
      "withdrawCollateral(address,uint256,uint64,uint256,bytes)": {
        "notice": "Transfer to `msg.sender` the collateral ERC-1155 token. The amount transferred is proportional to the score of `_condition` by the oracle."
      }
    },
    "notice": "Not audited, not enough tested. This allows anyone to claim 1000 conditional tokens in order for him to transfer money from the future. See `docs/future-money.rst` and anyone to donate. We have two kinds of ERC-1155 token IDs: - conditional tokens: numbers < 2**64 - a combination of a collateral contract address and collateral token ID   (a counter of donated amount of collateral tokens, don't confuse with collateral tokens themselves) In functions of this contact `condition` is always a customer's original address. We receive funds in ERC-1155, see also https://github.com/vporton/wrap-tokens",
    "version": 1
  }
}