Feature Tip: Add private address tag to any address under My Name Tag !
Announcement: Augur v2 has been launched!
Overview
Max Total Supply
8,034,964.245337587104684845 REPv2
Holders
12,791 (0.00%)
Market
Price
$0.56 @ 0.000162 ETH (+13.74%)
Onchain Market Cap
$4,527,348.54
Circulating Supply Market Cap
$6,198,015.63
Other Info
Token Contract (WITH 18 Decimals)
Balance
3,489.04683608 REPv2Value
$1,965.92 ( ~0.566275249220017 Eth) [0.0434%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | BingX | REP-USDT | $0.5715 0.0001644 Eth | $28,334.00 53,509.000 REP | 66.6046% |
2 | Currency.com | REP-USD | $0.5875 0.0001757 Eth | $14,100.00 24,000.000 REP | 29.8737% |
3 | Gate.io | REP-USDT | $0.5679 0.0001633 Eth | $4,660.36 8,933.700 REP | 11.1201% |
4 | Kraken | REPV2-USD | $0.573 0.0001648 Eth | $4,108.25 7,169.729 REPV2 | 8.9244% |
5 | Uniswap V2 (Ethereum) | 0X221657776846890989A759BA2973E427DFF5C9BB-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.5525 0.0001588 Eth | $2,527.47 4,836.433 0X221657776846890989A759BA2973E427DFF5C9BB | 6.0201% |
6 | Matcha (Ethereum) | 0X221657776846890989A759BA2973E427DFF5C9BB-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48 | $0.684 0.0002053 Eth | $2,000.38 3,061.918 0X221657776846890989A759BA2973E427DFF5C9BB | 3.8113% |
7 | zondacrypto | REP-PLN | $0.5666 0.0001624 Eth | $903.12 1,593.924 REP | 1.9840% |
8 | Kraken | REPV2-EUR | $0.5485 0.0001578 Eth | $649.95 1,185.021 REPV2 | 1.4750% |
9 | Indodax | REP-IDR | $0.4934 0.0001418 Eth | $498.86 1,010.991 REP | 1.2584% |
10 | LATOKEN | REP-USDT | $0.2941 0.0000845 Eth | $66.91 227.514 REP | 0.2832% |
11 | Uniswap V3 (Ethereum) | 0X221657776846890989A759BA2973E427DFF5C9BB-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.5746 0.0001718 Eth | $15.59 27.125 0X221657776846890989A759BA2973E427DFF5C9BB | 0.0338% |
12 | zondacrypto | REP-USDT | $0.5472 0.0001606 Eth | $11.46 20.940 REP | 0.0261% |
13 | Uniswap V2 (Ethereum) | 0X1985365E9F78359A9B6AD760E32412F4A445E862-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.9796 0.0002816 Eth | $8.88 9.060 0X1985365E9F78359A9B6AD760E32412F4A445E862 | 0.0113% |
14 | HitBTC | REP-BTC | $0.3384 0.0000997 Eth | $0.1239 0.366 REP | 0.0005% |
15 | HitBTC | REP-USDT | $0.4642 0.0001366 Eth | $0.1133 0.244 REP | 0.0003% |
16 | LATOKEN | REP-BTC | $0.3135 0.0000901 Eth | $0.0739 0.236 REP | 0.0003% |
Contract Name:
ReputationToken
Compiler Version
v0.5.15+commit.6a57276f
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.5.15; contract IAugur { function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] memory _parentPayoutNumerators) public returns (IUniverse); function isKnownUniverse(IUniverse _universe) public view returns (bool); function trustedCashTransfer(address _from, address _to, uint256 _amount) public returns (bool); function isTrustedSender(address _address) public returns (bool); function onCategoricalMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, bytes32[] memory _outcomes) public returns (bool); function onYesNoMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash) public returns (bool); function onScalarMarketCreated(uint256 _endTime, string memory _extraInfo, IMarket _market, address _marketCreator, address _designatedReporter, uint256 _feePerCashInAttoCash, int256[] memory _prices, uint256 _numTicks) public returns (bool); function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, address _initialReporter, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] memory _payoutNumerators, string memory _description, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime) public returns (bool); function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _size, uint256 _disputeRound) public returns (bool); function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked, string memory description, uint256[] memory _payoutNumerators, uint256 _currentStake, uint256 _stakeRemaining, uint256 _disputeRound) public returns (bool); function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] memory _payoutNumerators, uint256 _nextWindowStartTime, uint256 _nextWindowEndTime, bool _pacingOn, uint256 _totalRepStakedInPayout, uint256 _totalRepStakedInMarket, uint256 _disputeRound) public returns (bool); function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool); function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256[] memory _payoutNumerators) public returns (bool); function logMarketFinalized(IUniverse _universe, uint256[] memory _winningPayoutNumerators) public returns (bool); function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool); function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool); function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool); function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool); function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets, uint256 _fees) public returns (bool); function logMarketOIChanged(IUniverse _universe, IMarket _market) public returns (bool); function logTradingProceedsClaimed(IUniverse _universe, address _sender, address _market, uint256 _outcome, uint256 _numShares, uint256 _numPayoutTokens, uint256 _fees) public returns (bool); function logUniverseForked(IMarket _forkingMarket) public returns (bool); function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logReputationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logReputationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logShareTokensBalanceChanged(address _account, IMarket _market, uint256 _outcome, uint256 _balance) public returns (bool); function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logDisputeWindowCreated(IDisputeWindow _disputeWindow, uint256 _id, bool _initial) public returns (bool); function logParticipationTokensRedeemed(IUniverse universe, address _sender, uint256 _attoParticipationTokens, uint256 _feePayoutShare) public returns (bool); function logTimestampSet(uint256 _newTimestamp) public returns (bool); function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool); function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool); function logParticipationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value, uint256 _fromBalance, uint256 _toBalance) public returns (bool); function logParticipationTokensBurned(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logParticipationTokensMinted(IUniverse _universe, address _target, uint256 _amount, uint256 _totalSupply, uint256 _balance) public returns (bool); function logMarketRepBondTransferred(address _universe, address _from, address _to) public returns (bool); function logWarpSyncDataUpdated(address _universe, uint256 _warpSyncHash, uint256 _marketEndTime) public returns (bool); function isKnownFeeSender(address _feeSender) public view returns (bool); function lookup(bytes32 _key) public view returns (address); function getTimestamp() public view returns (uint256); function getMaximumMarketEndDate() public returns (uint256); function isKnownMarket(IMarket _market) public view returns (bool); function derivePayoutDistributionHash(uint256[] memory _payoutNumerators, uint256 _numTicks, uint256 numOutcomes) public view returns (bytes32); function logValidityBondChanged(uint256 _validityBond) public returns (bool); function logDesignatedReportStakeChanged(uint256 _designatedReportStake) public returns (bool); function logNoShowBondChanged(uint256 _noShowBond) public returns (bool); function logReportingFeeChanged(uint256 _reportingFee) public returns (bool); function getUniverseForkIndex(IUniverse _universe) public view returns (uint256); } contract IOwnable { function getOwner() public view returns (address); function transferOwnership(address _newOwner) public returns (bool); } contract ITyped { function getTypeName() public view returns (bytes32); } library SafeMathUint256 { function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function min(uint256 a, uint256 b) internal pure returns (uint256) { if (a <= b) { return a; } else { return b; } } function max(uint256 a, uint256 b) internal pure returns (uint256) { if (a >= b) { return a; } else { return b; } } function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { uint256 x = (y + 1) / 2; z = y; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function getUint256Min() internal pure returns (uint256) { return 0; } function getUint256Max() internal pure returns (uint256) { // 2 ** 256 - 1 return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; } function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) { return a % b == 0; } // Float [fixed point] Operations function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, b), base); } function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, base), b); } } interface IERC1155 { /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, /// including zero value transfers as well as minting or burning. /// Operator will always be msg.sender. /// Either event from address `0x0` signifies a minting operation. /// An event to address `0x0` signifies a burning or melting operation. /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID. /// To define a token ID with no initial balance, the contract SHOULD emit the TransferSingle event /// from `0x0` to `0x0`, with the token creator as `_operator`. event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); /// @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, /// including zero value transfers as well as minting or burning. ///Operator will always be msg.sender. /// Either event from address `0x0` signifies a minting operation. /// An event to address `0x0` signifies a burning or melting operation. /// The total value transferred from address 0x0 minus the total value transferred to 0x0 may /// be used by clients and exchanges to be added to the "circulating supply" for a given token ID. /// To define multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event /// from `0x0` to `0x0`, with the token creator as `_operator`. event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /// @dev MUST emit when an approval is updated. event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /// @dev MUST emit when the URI is updated for a token ID. /// URIs are defined in RFC 3986. /// The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema". event URI( string value, uint256 indexed id ); /// @notice Transfers value amount of an _id from the _from address to the _to address specified. /// @dev MUST emit TransferSingle event on success. /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll). /// MUST throw if `_to` is the zero address. /// MUST throw if balance of sender for token `_id` is lower than the `_value` sent. /// MUST throw on any other error. /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). /// If so, it MUST call `onERC1155Received` on `_to` and revert if the return value /// is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`. /// @param from Source address /// @param to Target address /// @param id ID of the token type /// @param value Transfer amount /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom( address from, address to, uint256 id, uint256 value, bytes calldata data ) external; /// @notice Send multiple types of Tokens from a 3rd party in one transfer (with safety call). /// @dev MUST emit TransferBatch event on success. /// Caller must be approved to manage the _from account's tokens (see isApprovedForAll). /// MUST throw if `_to` is the zero address. /// MUST throw if length of `_ids` is not the same as length of `_values`. /// MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_values` sent. /// MUST throw on any other error. /// When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). /// If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return value /// is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`. /// @param from Source addresses /// @param to Target addresses /// @param ids IDs of each token type /// @param values Transfer amounts per token type /// @param data Additional data with no specified format, sent in call to `_to` function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; /// @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens. /// @dev MUST emit the ApprovalForAll event on success. /// @param operator Address to add to the set of authorized operators /// @param approved True if the operator is approved, false to revoke approval function setApprovalForAll(address operator, bool approved) external; /// @notice Queries the approval status of an operator for a given owner. /// @param owner The owner of the Tokens /// @param operator Address of authorized operator /// @return True if the operator is approved, false if not function isApprovedForAll(address owner, address operator) external view returns (bool); /// @notice Get the balance of an account's Tokens. /// @param owner The address of the token holder /// @param id ID of the Token /// @return The _owner's balance of the Token type requested function balanceOf(address owner, uint256 id) external view returns (uint256); /// @notice Get the total supply of a Token. /// @param id ID of the Token /// @return The total supply of the Token type requested function totalSupply(uint256 id) external view returns (uint256); /// @notice Get the balance of multiple account/token pairs /// @param owners The addresses of the token holders /// @param ids ID of the Tokens /// @return The _owner's balance of the Token types requested function balanceOfBatch( address[] calldata owners, uint256[] calldata ids ) external view returns (uint256[] memory balances_); } contract IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address owner) public view returns (uint256); function transfer(address to, uint256 amount) public returns (bool); function transferFrom(address from, address to, uint256 amount) public returns (bool); function approve(address spender, uint256 amount) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); // solhint-disable-next-line no-simple-event-func-name event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ICash is IERC20 { } contract ERC20 is IERC20 { using SafeMathUint256 for uint256; uint8 constant public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowances; /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address _account) public view returns (uint256) { return balances[_account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address _recipient, uint256 _amount) public returns (bool) { _transfer(msg.sender, _recipient, _amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowances[_owner][_spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address _spender, uint256 _amount) public returns (bool) { _approve(msg.sender, _spender, _amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address _sender, address _recipient, uint256 _amount) public returns (bool) { _transfer(_sender, _recipient, _amount); _approve(_sender, msg.sender, allowances[_sender][msg.sender].sub(_amount)); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) { _approve(msg.sender, _spender, allowances[msg.sender][_spender].add(_addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) { _approve(msg.sender, _spender, allowances[msg.sender][_spender].sub(_subtractedValue)); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address _sender, address _recipient, uint256 _amount) internal { require(_sender != address(0), "ERC20: transfer from the zero address"); require(_recipient != address(0), "ERC20: transfer to the zero address"); balances[_sender] = balances[_sender].sub(_amount); balances[_recipient] = balances[_recipient].add(_amount); emit Transfer(_sender, _recipient, _amount); onTokenTransfer(_sender, _recipient, _amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address _account, uint256 _amount) internal { require(_account != address(0), "ERC20: mint to the zero address"); totalSupply = totalSupply.add(_amount); balances[_account] = balances[_account].add(_amount); emit Transfer(address(0), _account, _amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address _account, uint256 _amount) internal { require(_account != address(0), "ERC20: burn from the zero address"); balances[_account] = balances[_account].sub(_amount); totalSupply = totalSupply.sub(_amount); emit Transfer(_account, address(0), _amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address _owner, address _spender, uint256 _amount) internal { require(_owner != address(0), "ERC20: approve from the zero address"); require(_spender != address(0), "ERC20: approve to the zero address"); allowances[_owner][_spender] = _amount; emit Approval(_owner, _spender, _amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address _account, uint256 _amount) internal { _burn(_account, _amount); _approve(_account, msg.sender, allowances[_account][msg.sender].sub(_amount)); } // Subclasses of this token generally want to send additional logs through the centralized Augur log emitter contract function onTokenTransfer(address _from, address _to, uint256 _value) internal; } contract VariableSupplyToken is ERC20 { using SafeMathUint256 for uint256; function mint(address _target, uint256 _amount) internal returns (bool) { _mint(_target, _amount); onMint(_target, _amount); return true; } function burn(address _target, uint256 _amount) internal returns (bool) { _burn(_target, _amount); onBurn(_target, _amount); return true; } // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract function onMint(address, uint256) internal { } // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract function onBurn(address, uint256) internal { } } contract IAffiliateValidator { function validateReference(address _account, address _referrer) external view returns (bool); } contract IDisputeWindow is ITyped, IERC20 { function invalidMarketsTotal() external view returns (uint256); function validityBondTotal() external view returns (uint256); function incorrectDesignatedReportTotal() external view returns (uint256); function initialReportBondTotal() external view returns (uint256); function designatedReportNoShowsTotal() external view returns (uint256); function designatedReporterNoShowBondTotal() external view returns (uint256); function initialize(IAugur _augur, IUniverse _universe, uint256 _disputeWindowId, bool _participationTokensEnabled, uint256 _duration, uint256 _startTime) public; function trustedBuy(address _buyer, uint256 _attotokens) public returns (bool); function getUniverse() public view returns (IUniverse); function getReputationToken() public view returns (IReputationToken); function getStartTime() public view returns (uint256); function getEndTime() public view returns (uint256); function getWindowId() public view returns (uint256); function isActive() public view returns (bool); function isOver() public view returns (bool); function onMarketFinalized() public; function redeem(address _account) public returns (bool); } contract IMarket is IOwnable { enum MarketType { YES_NO, CATEGORICAL, SCALAR } function initialize(IAugur _augur, IUniverse _universe, uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public; function derivePayoutDistributionHash(uint256[] memory _payoutNumerators) public view returns (bytes32); function doInitialReport(uint256[] memory _payoutNumerators, string memory _description, uint256 _additionalStake) public returns (bool); function getUniverse() public view returns (IUniverse); function getDisputeWindow() public view returns (IDisputeWindow); function getNumberOfOutcomes() public view returns (uint256); function getNumTicks() public view returns (uint256); function getMarketCreatorSettlementFeeDivisor() public view returns (uint256); function getForkingMarket() public view returns (IMarket _market); function getEndTime() public view returns (uint256); function getWinningPayoutDistributionHash() public view returns (bytes32); function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256); function getWinningReportingParticipant() public view returns (IReportingParticipant); function getReputationToken() public view returns (IV2ReputationToken); function getFinalizationTime() public view returns (uint256); function getInitialReporter() public view returns (IInitialReporter); function getDesignatedReportingEndTime() public view returns (uint256); function getValidityBondAttoCash() public view returns (uint256); function affiliateFeeDivisor() external view returns (uint256); function getNumParticipants() public view returns (uint256); function getDisputePacingOn() public view returns (bool); function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256); function recordMarketCreatorFees(uint256 _marketCreatorFees, address _sourceAccount, bytes32 _fingerprint) public returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function isFinalizedAsInvalid() public view returns (bool); function finalize() public returns (bool); function isFinalized() public view returns (bool); function getOpenInterest() public view returns (uint256); } contract IReportingParticipant { function getStake() public view returns (uint256); function getPayoutDistributionHash() public view returns (bytes32); function liquidateLosing() public; function redeem(address _redeemer) public returns (bool); function isDisavowed() public view returns (bool); function getPayoutNumerator(uint256 _outcome) public view returns (uint256); function getPayoutNumerators() public view returns (uint256[] memory); function getMarket() public view returns (IMarket); function getSize() public view returns (uint256); } contract IDisputeCrowdsourcer is IReportingParticipant, IERC20 { function initialize(IAugur _augur, IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _crowdsourcerGeneration) public; function contribute(address _participant, uint256 _amount, bool _overload) public returns (uint256); function setSize(uint256 _size) public; function getRemainingToFill() public view returns (uint256); function correctSize() public returns (bool); function getCrowdsourcerGeneration() public view returns (uint256); } contract IInitialReporter is IReportingParticipant, IOwnable { function initialize(IAugur _augur, IMarket _market, address _designatedReporter) public; function report(address _reporter, bytes32 _payoutDistributionHash, uint256[] memory _payoutNumerators, uint256 _initialReportStake) public; function designatedReporterShowed() public view returns (bool); function initialReporterWasCorrect() public view returns (bool); function getDesignatedReporter() public view returns (address); function getReportTimestamp() public view returns (uint256); function migrateToNewUniverse(address _designatedReporter) public; function returnRepFromDisavow() public; } contract IReputationToken is IERC20 { function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool); function migrateIn(address _reporter, uint256 _attotokens) public returns (bool); function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function getUniverse() public view returns (IUniverse); function getTotalMigrated() public view returns (uint256); function getTotalTheoreticalSupply() public view returns (uint256); function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool); } contract IShareToken is ITyped, IERC1155 { function initialize(IAugur _augur) external; function initializeMarket(IMarket _market, uint256 _numOutcomes, uint256 _numTicks) public; function unsafeTransferFrom(address _from, address _to, uint256 _id, uint256 _value) public; function unsafeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _values) public; function claimTradingProceeds(IMarket _market, address _shareHolder, bytes32 _fingerprint) external returns (uint256[] memory _outcomeFees); function getMarket(uint256 _tokenId) external view returns (IMarket); function getOutcome(uint256 _tokenId) external view returns (uint256); function getTokenId(IMarket _market, uint256 _outcome) public pure returns (uint256 _tokenId); function getTokenIds(IMarket _market, uint256[] memory _outcomes) public pure returns (uint256[] memory _tokenIds); function buyCompleteSets(IMarket _market, address _account, uint256 _amount) external returns (bool); function buyCompleteSetsForTrade(IMarket _market, uint256 _amount, uint256 _longOutcome, address _longRecipient, address _shortRecipient) external returns (bool); function sellCompleteSets(IMarket _market, address _holder, address _recipient, uint256 _amount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee); function sellCompleteSetsForTrade(IMarket _market, uint256 _outcome, uint256 _amount, address _shortParticipant, address _longParticipant, address _shortRecipient, address _longRecipient, uint256 _price, address _sourceAccount, bytes32 _fingerprint) external returns (uint256 _creatorFee, uint256 _reportingFee); function totalSupplyForMarketOutcome(IMarket _market, uint256 _outcome) public view returns (uint256); function balanceOfMarketOutcome(IMarket _market, uint256 _outcome, address _account) public view returns (uint256); function lowestBalanceOfMarketOutcomes(IMarket _market, uint256[] memory _outcomes, address _account) public view returns (uint256); } contract IUniverse { function creationTime() external view returns (uint256); function marketBalance(address) external view returns (uint256); function fork() public returns (bool); function updateForkValues() public returns (bool); function getParentUniverse() public view returns (IUniverse); function createChildUniverse(uint256[] memory _parentPayoutNumerators) public returns (IUniverse); function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse); function getReputationToken() public view returns (IV2ReputationToken); function getForkingMarket() public view returns (IMarket); function getForkEndTime() public view returns (uint256); function getForkReputationGoal() public view returns (uint256); function getParentPayoutDistributionHash() public view returns (bytes32); function getDisputeRoundDurationInSeconds(bool _initial) public view returns (uint256); function getOrCreateDisputeWindowByTimestamp(uint256 _timestamp, bool _initial) public returns (IDisputeWindow); function getOrCreateCurrentDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOrCreateNextDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOrCreatePreviousDisputeWindow(bool _initial) public returns (IDisputeWindow); function getOpenInterestInAttoCash() public view returns (uint256); function getTargetRepMarketCapInAttoCash() public view returns (uint256); function getOrCacheValidityBond() public returns (uint256); function getOrCacheDesignatedReportStake() public returns (uint256); function getOrCacheDesignatedReportNoShowBond() public returns (uint256); function getOrCacheMarketRepBond() public returns (uint256); function getOrCacheReportingFeeDivisor() public returns (uint256); function getDisputeThresholdForFork() public view returns (uint256); function getDisputeThresholdForDisputePacing() public view returns (uint256); function getInitialReportMinValue() public view returns (uint256); function getPayoutNumerators() public view returns (uint256[] memory); function getReportingFeeDivisor() public view returns (uint256); function getPayoutNumerator(uint256 _outcome) public view returns (uint256); function getWinningChildPayoutNumerator(uint256 _outcome) public view returns (uint256); function isOpenInterestCash(address) public view returns (bool); function isForkingMarket() public view returns (bool); function getCurrentDisputeWindow(bool _initial) public view returns (IDisputeWindow); function getDisputeWindowStartTimeAndDuration(uint256 _timestamp, bool _initial) public view returns (uint256, uint256); function isParentOf(IUniverse _shadyChild) public view returns (bool); function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool); function isContainerForDisputeWindow(IDisputeWindow _shadyTarget) public view returns (bool); function isContainerForMarket(IMarket _shadyTarget) public view returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function migrateMarketOut(IUniverse _destinationUniverse) public returns (bool); function migrateMarketIn(IMarket _market, uint256 _cashBalance, uint256 _marketOI) public returns (bool); function decrementOpenInterest(uint256 _amount) public returns (bool); function decrementOpenInterestFromMarket(IMarket _market) public returns (bool); function incrementOpenInterest(uint256 _amount) public returns (bool); function getWinningChildUniverse() public view returns (IUniverse); function isForking() public view returns (bool); function deposit(address _sender, uint256 _amount, address _market) public returns (bool); function withdraw(address _recipient, uint256 _amount, address _market) public returns (bool); function createScalarMarket(uint256 _endTime, uint256 _feePerCashInAttoCash, IAffiliateValidator _affiliateValidator, uint256 _affiliateFeeDivisor, address _designatedReporterAddress, int256[] memory _prices, uint256 _numTicks, string memory _extraInfo) public returns (IMarket _newMarket); } contract IV2ReputationToken is IReputationToken { function parentUniverse() external returns (IUniverse); function burnForMarket(uint256 _amountToBurn) public returns (bool); function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool); } library Reporting { uint256 private constant DESIGNATED_REPORTING_DURATION_SECONDS = 1 days; uint256 private constant DISPUTE_ROUND_DURATION_SECONDS = 7 days; uint256 private constant INITIAL_DISPUTE_ROUND_DURATION_SECONDS = 1 days; uint256 private constant DISPUTE_WINDOW_BUFFER_SECONDS = 1 hours; uint256 private constant FORK_DURATION_SECONDS = 60 days; uint256 private constant BASE_MARKET_DURATION_MAXIMUM = 30 days; // A market of 30 day length can always be created uint256 private constant UPGRADE_CADENCE = 365 days; uint256 private constant INITIAL_UPGRADE_TIMESTAMP = 1627776000; // Aug 1st 2021 uint256 private constant INITIAL_REP_SUPPLY = 11 * 10 ** 6 * 10 ** 18; // 11 Million REP uint256 private constant AFFILIATE_SOURCE_CUT_DIVISOR = 5; // The trader gets 20% of the affiliate fee when an affiliate fee is taken uint256 private constant DEFAULT_VALIDITY_BOND = 10 ether; // 10 Cash (Dai) uint256 private constant VALIDITY_BOND_FLOOR = 10 ether; // 10 Cash (Dai) uint256 private constant DEFAULT_REPORTING_FEE_DIVISOR = 10000; // .01% fees uint256 private constant MAXIMUM_REPORTING_FEE_DIVISOR = 10000; // Minimum .01% fees uint256 private constant MINIMUM_REPORTING_FEE_DIVISOR = 3; // Maximum 33.3~% fees. Note than anything less than a value of 2 here will likely result in bugs such as divide by 0 cases. uint256 private constant TARGET_INVALID_MARKETS_DIVISOR = 100; // 1% of markets are expected to be invalid uint256 private constant TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report uint256 private constant TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR = 20; // 5% of markets are expected to have a no show uint256 private constant TARGET_REP_MARKET_CAP_MULTIPLIER = 5; // We multiply and divide by constants since we may want to multiply by a fractional amount uint256 private constant FORK_THRESHOLD_DIVISOR = 40; // 2.5% of the total REP supply being filled in a single dispute bond will trigger a fork uint256 private constant MAXIMUM_DISPUTE_ROUNDS = 20; // We ensure that after 20 rounds of disputes a fork will occur uint256 private constant MINIMUM_SLOW_ROUNDS = 8; // We ensure that at least 8 dispute rounds take DISPUTE_ROUND_DURATION_SECONDS+ seconds to complete until the next round begins function getDesignatedReportingDurationSeconds() internal pure returns (uint256) { return DESIGNATED_REPORTING_DURATION_SECONDS; } function getInitialDisputeRoundDurationSeconds() internal pure returns (uint256) { return INITIAL_DISPUTE_ROUND_DURATION_SECONDS; } function getDisputeWindowBufferSeconds() internal pure returns (uint256) { return DISPUTE_WINDOW_BUFFER_SECONDS; } function getDisputeRoundDurationSeconds() internal pure returns (uint256) { return DISPUTE_ROUND_DURATION_SECONDS; } function getForkDurationSeconds() internal pure returns (uint256) { return FORK_DURATION_SECONDS; } function getBaseMarketDurationMaximum() internal pure returns (uint256) { return BASE_MARKET_DURATION_MAXIMUM; } function getUpgradeCadence() internal pure returns (uint256) { return UPGRADE_CADENCE; } function getInitialUpgradeTimestamp() internal pure returns (uint256) { return INITIAL_UPGRADE_TIMESTAMP; } function getDefaultValidityBond() internal pure returns (uint256) { return DEFAULT_VALIDITY_BOND; } function getValidityBondFloor() internal pure returns (uint256) { return VALIDITY_BOND_FLOOR; } function getTargetInvalidMarketsDivisor() internal pure returns (uint256) { return TARGET_INVALID_MARKETS_DIVISOR; } function getTargetIncorrectDesignatedReportMarketsDivisor() internal pure returns (uint256) { return TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR; } function getTargetDesignatedReportNoShowsDivisor() internal pure returns (uint256) { return TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR; } function getTargetRepMarketCapMultiplier() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_MULTIPLIER; } function getMaximumReportingFeeDivisor() internal pure returns (uint256) { return MAXIMUM_REPORTING_FEE_DIVISOR; } function getMinimumReportingFeeDivisor() internal pure returns (uint256) { return MINIMUM_REPORTING_FEE_DIVISOR; } function getDefaultReportingFeeDivisor() internal pure returns (uint256) { return DEFAULT_REPORTING_FEE_DIVISOR; } function getInitialREPSupply() internal pure returns (uint256) { return INITIAL_REP_SUPPLY; } function getAffiliateSourceCutDivisor() internal pure returns (uint256) { return AFFILIATE_SOURCE_CUT_DIVISOR; } function getForkThresholdDivisor() internal pure returns (uint256) { return FORK_THRESHOLD_DIVISOR; } function getMaximumDisputeRounds() internal pure returns (uint256) { return MAXIMUM_DISPUTE_ROUNDS; } function getMinimumSlowRounds() internal pure returns (uint256) { return MINIMUM_SLOW_ROUNDS; } } contract IAugurTrading { function lookup(bytes32 _key) public view returns (address); function logProfitLossChanged(IMarket _market, address _account, uint256 _outcome, int256 _netPosition, uint256 _avgPrice, int256 _realizedProfit, int256 _frozenFunds, int256 _realizedCost) public returns (bool); function logOrderCreated(IUniverse _universe, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool); function logOrderCanceled(IUniverse _universe, IMarket _market, address _creator, uint256 _tokenRefund, uint256 _sharesRefund, bytes32 _orderId) public returns (bool); function logOrderFilled(IUniverse _universe, address _creator, address _filler, uint256 _price, uint256 _fees, uint256 _amountFilled, bytes32 _orderId, bytes32 _tradeGroupId) public returns (bool); function logMarketVolumeChanged(IUniverse _universe, address _market, uint256 _volume, uint256[] memory _outcomeVolumes, uint256 _totalTrades) public returns (bool); function logZeroXOrderFilled(IUniverse _universe, IMarket _market, bytes32 _orderHash, bytes32 _tradeGroupId, uint8 _orderType, address[] memory _addressData, uint256[] memory _uint256Data) public returns (bool); function logZeroXOrderCanceled(address _universe, address _market, address _account, uint256 _outcome, uint256 _price, uint256 _amount, uint8 _type, bytes32 _orderHash) public; } contract IOrders { function saveOrder(uint256[] calldata _uints, bytes32[] calldata _bytes32s, Order.Types _type, IMarket _market, address _sender) external returns (bytes32 _orderId); function removeOrder(bytes32 _orderId) external returns (bool); function getMarket(bytes32 _orderId) public view returns (IMarket); function getOrderType(bytes32 _orderId) public view returns (Order.Types); function getOutcome(bytes32 _orderId) public view returns (uint256); function getAmount(bytes32 _orderId) public view returns (uint256); function getPrice(bytes32 _orderId) public view returns (uint256); function getOrderCreator(bytes32 _orderId) public view returns (address); function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256); function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256); function getOrderDataForCancel(bytes32 _orderId) public view returns (uint256, uint256, Order.Types, IMarket, uint256, address); function getOrderDataForLogs(bytes32 _orderId) public view returns (Order.Types, address[] memory _addressData, uint256[] memory _uint256Data); function getBetterOrderId(bytes32 _orderId) public view returns (bytes32); function getWorseOrderId(bytes32 _orderId) public view returns (bytes32); function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256); function getOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32); function getTotalEscrowed(IMarket _market) public view returns (uint256); function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool); function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool); function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled, uint256 _fill) external returns (bool); function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool); } library Order { using SafeMathUint256 for uint256; enum Types { Bid, Ask } enum TradeDirections { Long, Short } struct Data { // Contracts IMarket market; IAugur augur; IAugurTrading augurTrading; IShareToken shareToken; ICash cash; // Order bytes32 id; address creator; uint256 outcome; Order.Types orderType; uint256 amount; uint256 price; uint256 sharesEscrowed; uint256 moneyEscrowed; bytes32 betterOrderId; bytes32 worseOrderId; } function create(IAugur _augur, IAugurTrading _augurTrading, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data memory) { require(_outcome < _market.getNumberOfOutcomes(), "Order.create: Outcome is not within market range"); require(_price != 0, "Order.create: Price may not be 0"); require(_price < _market.getNumTicks(), "Order.create: Price is outside of market range"); require(_attoshares > 0, "Order.create: Cannot use amount of 0"); require(_creator != address(0), "Order.create: Creator is 0x0"); IShareToken _shareToken = IShareToken(_augur.lookup("ShareToken")); return Data({ market: _market, augur: _augur, augurTrading: _augurTrading, shareToken: _shareToken, cash: ICash(_augur.lookup("Cash")), id: 0, creator: _creator, outcome: _outcome, orderType: _type, amount: _attoshares, price: _price, sharesEscrowed: 0, moneyEscrowed: 0, betterOrderId: _betterOrderId, worseOrderId: _worseOrderId }); } // // "public" functions // function getOrderId(Order.Data memory _orderData, IOrders _orders) internal view returns (bytes32) { if (_orderData.id == bytes32(0)) { bytes32 _orderId = calculateOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed); require(_orders.getAmount(_orderId) == 0, "Order.getOrderId: New order had amount. This should not be possible"); _orderData.id = _orderId; } return _orderData.id; } function calculateOrderId(Order.Types _type, IMarket _market, uint256 _amount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) internal pure returns (bytes32) { return sha256(abi.encodePacked(_type, _market, _amount, _price, _sender, _blockNumber, _outcome, _moneyEscrowed, _sharesEscrowed)); } function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) { return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask; } function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) { return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid; } function saveOrder(Order.Data memory _orderData, bytes32 _tradeGroupId, IOrders _orders) internal returns (bytes32) { getOrderId(_orderData, _orders); uint256[] memory _uints = new uint256[](5); _uints[0] = _orderData.amount; _uints[1] = _orderData.price; _uints[2] = _orderData.outcome; _uints[3] = _orderData.moneyEscrowed; _uints[4] = _orderData.sharesEscrowed; bytes32[] memory _bytes32s = new bytes32[](4); _bytes32s[0] = _orderData.betterOrderId; _bytes32s[1] = _orderData.worseOrderId; _bytes32s[2] = _tradeGroupId; _bytes32s[3] = _orderData.id; return _orders.saveOrder(_uints, _bytes32s, _orderData.orderType, _orderData.market, _orderData.creator); } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } contract IRepSymbol { function getRepSymbol(address _augur, address _universe) external view returns (string memory); } contract ReputationToken is VariableSupplyToken, IV2ReputationToken { using SafeMathUint256 for uint256; string constant public name = "Reputation"; IUniverse internal universe; IUniverse public parentUniverse; uint256 internal totalMigrated; IERC20 public legacyRepToken; IAugur public augur; address public warpSync; constructor(IAugur _augur, IUniverse _universe, IUniverse _parentUniverse) public { augur = _augur; universe = _universe; parentUniverse = _parentUniverse; warpSync = _augur.lookup("WarpSync"); legacyRepToken = IERC20(_augur.lookup("LegacyReputationToken")); require(warpSync != address(0)); require(legacyRepToken != IERC20(0)); } function symbol() public view returns (string memory) { return IRepSymbol(augur.lookup("RepSymbol")).getRepSymbol(address(augur), address(universe)); } /** * @notice Migrate to a Child Universe by indicating the Market payout associated with it * @param _payoutNumerators The array of payouts for the market associated with the desired universe * @param _attotokens The amount of tokens to migrate * @return Bool True */ function migrateOutByPayout(uint256[] memory _payoutNumerators, uint256 _attotokens) public returns (bool) { require(_attotokens > 0); IUniverse _destinationUniverse = universe.createChildUniverse(_payoutNumerators); IReputationToken _destination = _destinationUniverse.getReputationToken(); burn(msg.sender, _attotokens); _destination.migrateIn(msg.sender, _attotokens); return true; } function migrateIn(address _reporter, uint256 _attotokens) public returns (bool) { IUniverse _parentUniverse = parentUniverse; require(ReputationToken(msg.sender) == _parentUniverse.getReputationToken()); require(augur.getTimestamp() < _parentUniverse.getForkEndTime()); mint(_reporter, _attotokens); totalMigrated += _attotokens; // Update the fork tentative winner and finalize if we can if (!_parentUniverse.getForkingMarket().isFinalized()) { _parentUniverse.updateTentativeWinningChildUniverse(universe.getParentPayoutDistributionHash()); } return true; } function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool) { IReportingParticipant _reportingParticipant = IReportingParticipant(msg.sender); require(parentUniverse.isContainerForReportingParticipant(_reportingParticipant)); // simulate a 40% ROI which would have occured during a normal dispute had this participant's outcome won the dispute uint256 _bonus = _amountMigrated.mul(2) / 5; mint(address(_reportingParticipant), _bonus); return true; } function mintForWarpSync(uint256 _amountToMint, address _target) public returns (bool) { require(warpSync == msg.sender); mint(_target, _amountToMint); universe.updateForkValues(); return true; } function burnForMarket(uint256 _amountToBurn) public returns (bool) { require(universe.isContainerForMarket(IMarket(msg.sender))); burn(msg.sender, _amountToBurn); return true; } function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) { require(IUniverse(msg.sender) == universe); _transfer(_source, _destination, _attotokens); return true; } function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) { require(universe.isContainerForMarket(IMarket(msg.sender))); _transfer(_source, _destination, _attotokens); return true; } function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) { require(universe.isContainerForReportingParticipant(IReportingParticipant(msg.sender))); _transfer(_source, _destination, _attotokens); return true; } function trustedDisputeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool) { require(universe.isContainerForDisputeWindow(IDisputeWindow(msg.sender))); _transfer(_source, _destination, _attotokens); return true; } function assertReputationTokenIsLegitChild(IReputationToken _shadyReputationToken) private view { IUniverse _universe = _shadyReputationToken.getUniverse(); require(universe.isParentOf(_universe)); require(_universe.getReputationToken() == _shadyReputationToken); } /** * @return The universe associated with this Reputation Token */ function getUniverse() public view returns (IUniverse) { return universe; } /** * @return The total amount of parent REP migrated into this version of REP */ function getTotalMigrated() public view returns (uint256) { return totalMigrated; } /** * @return The V1 Rep token */ function getLegacyRepToken() public view returns (IERC20) { return legacyRepToken; } /** * @return The maximum possible total supply for this version of REP. */ function getTotalTheoreticalSupply() public view returns (uint256) { uint256 _totalSupply = totalSupply; if (parentUniverse == IUniverse(0)) { return _totalSupply.add(legacyRepToken.totalSupply()).sub(legacyRepToken.balanceOf(address(1))).sub(legacyRepToken.balanceOf(address(0))); } else if (augur.getTimestamp() >= parentUniverse.getForkEndTime()) { return _totalSupply; } else { return _totalSupply + parentUniverse.getReputationToken().getTotalTheoreticalSupply(); } } function onTokenTransfer(address _from, address _to, uint256 _value) internal { augur.logReputationTokensTransferred(universe, _from, _to, _value, balances[_from], balances[_to]); } function onMint(address _target, uint256 _amount) internal { augur.logReputationTokensMinted(universe, _target, _amount, totalSupply, balances[_target]); } function onBurn(address _target, uint256 _amount) internal { augur.logReputationTokensBurned(universe, _target, _amount, totalSupply, balances[_target]); } /** * @notice Migrate V1 REP to V2 * @dev This can only be done for the Genesis Universe in V2. If a fork occurs and the window ends V1 REP is stuck in V1 forever * @return Bool True */ function migrateFromLegacyReputationToken() public returns (bool) { require(parentUniverse == IUniverse(0)); uint256 _legacyBalance = legacyRepToken.balanceOf(msg.sender); require(legacyRepToken.transferFrom(msg.sender, address(1), _legacyBalance)); mint(msg.sender, _legacyBalance); return true; } }
{ "remappings": [ "ROOT=/home/achapman/augur/packages/augur-core/src/contracts//" ], "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IAugur","name":"_augur","type":"address"},{"internalType":"contract IUniverse","name":"_universe","type":"address"},{"internalType":"contract IUniverse","name":"_parentUniverse","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"augur","outputs":[{"internalType":"contract IAugur","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountToBurn","type":"uint256"}],"name":"burnForMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLegacyRepToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalMigrated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalTheoreticalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"legacyRepToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"migrateFromLegacyReputationToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_reporter","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"migrateIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"_payoutNumerators","type":"uint256[]"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"migrateOutByPayout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountMigrated","type":"uint256"}],"name":"mintForReportingParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountToMint","type":"uint256"},{"internalType":"address","name":"_target","type":"address"}],"name":"mintForWarpSync","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentUniverse","outputs":[{"internalType":"contract IUniverse","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedDisputeWindowTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedMarketTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedReportingParticipantTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_source","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_attotokens","type":"uint256"}],"name":"trustedUniverseTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"warpSync","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620020ac380380620020ac833981810160405260608110156200003757600080fd5b508051602080830151604093840151600780546001600160a01b038087166001600160a01b03199283168117909355600380548287169084161790556004805491851691909216178155865163f39ec1f760e01b8152675761727053796e6360c01b918101919091529551949592949193909263f39ec1f79260248083019392829003018186803b158015620000cc57600080fd5b505afa158015620000e1573d6000803e3d6000fd5b505050506040513d6020811015620000f857600080fd5b5051600880546001600160a01b0319166001600160a01b039283161790556040805163f39ec1f760e01b81527f4c656761637952657075746174696f6e546f6b656e0000000000000000000000600482015290519185169163f39ec1f791602480820192602092909190829003018186803b1580156200017757600080fd5b505afa1580156200018c573d6000803e3d6000fd5b505050506040513d6020811015620001a357600080fd5b5051600680546001600160a01b0319166001600160a01b0392831617905560085416620001cf57600080fd5b6006546001600160a01b0316620001e557600080fd5b505050611eb480620001f86000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063774692751161010f578063ae3816ee116100a2578063dd62ed3e11610071578063dd62ed3e146105f6578063e1897b5914610624578063f22b258a14610650578063fe98184d14610686576101e5565b8063ae3816ee1461057e578063b873e9a71461059b578063d5466777146105d1578063db054134146105d9576101e5565b806395d89b41116100de57806395d89b41146104f2578063a0c1ca34146104fa578063a457c2d714610526578063a9059cbb14610552576101e5565b806377469275146104d25780637a0d8f8a146104da578063870c426d146104e257806391d76bbb146104ea576101e5565b8063313ce567116101875780635bd5ea71116101565780635bd5ea711461046657806370a082311461046e578063721bb1701461049457806375d9aa1a146104ca576101e5565b8063313ce56714610349578063395093511461036757806355b6ed5c146103935780635b66876a146103c1576101e5565b8063183636c5116101c3578063183636c5146102c1578063238d3590146102e557806323b872dd146102ed57806327e235e314610323576101e5565b806306fdde03146101ea578063095ea7b31461026757806318160ddd146102a7575b600080fd5b6101f26106bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b0381351690602001356106e2565b604080519115158252519081900360200190f35b6102af6106f9565b60408051918252519081900360200190f35b6102c96106ff565b604080516001600160a01b039092168252519081900360200190f35b6102af61070e565b6102936004803603606081101561030357600080fd5b506001600160a01b03813581169160208101359091169060400135610a75565b6102af6004803603602081101561033957600080fd5b50356001600160a01b0316610acc565b610351610ade565b6040805160ff9092168252519081900360200190f35b6102936004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610ae3565b6102af600480360360408110156103a957600080fd5b506001600160a01b0381358116916020013516610b1f565b610293600480360360408110156103d757600080fd5b8101906020810181356401000000008111156103f257600080fd5b82018360208201111561040457600080fd5b8035906020019184602083028401116401000000008311171561042657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610b3c915050565b6102c9610d00565b6102af6004803603602081101561048457600080fd5b50356001600160a01b0316610d0f565b610293600480360360608110156104aa57600080fd5b506001600160a01b03813581169160208101359091169060400135610d2a565b610293610db5565b6102c9610eeb565b6102c9610efa565b6102c9610f09565b6102af610f18565b6101f2610f1e565b6102936004803603604081101561051057600080fd5b506001600160a01b0381351690602001356110ea565b6102936004803603604081101561053c57600080fd5b506001600160a01b03813516906020013561143f565b6102936004803603604081101561056857600080fd5b506001600160a01b03813516906020013561147b565b6102936004803603602081101561059457600080fd5b5035611488565b610293600480360360608110156105b157600080fd5b506001600160a01b03813581169160208101359091169060400135611512565b6102c961155d565b610293600480360360208110156105ef57600080fd5b503561156c565b6102af6004803603604081101561060c57600080fd5b506001600160a01b0381358116916020013516611623565b6102936004803603604081101561063a57600080fd5b50803590602001356001600160a01b031661164e565b6102936004803603606081101561066657600080fd5b506001600160a01b038135811691602081013590911690604001356116ed565b6102936004803603606081101561069c57600080fd5b506001600160a01b03813581169160208101359091169060400135611738565b6040518060400160405280600a8152602001692932b83aba30ba34b7b760b11b81525081565b60006106ef338484611752565b5060015b92915050565b60005481565b6004546001600160a01b031681565b600080546004546001600160a01b03166108a757600654604080516370a0823160e01b815260006004820152905161089f926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d602081101561079957600080fd5b5051600654604080516370a0823160e01b8152600160048201529051610893926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d602081101561081257600080fd5b5051600654604080516318160ddd60e01b81529051610893926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d602081101561088457600080fd5b5051869063ffffffff61183e16565b9063ffffffff61185716565b915050610a72565b60048054604080516377e71ee560e01b815290516001600160a01b03909216926377e71ee5928282019260209290829003018186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561095a57600080fd5b505afa15801561096e573d6000803e3d6000fd5b505050506040513d602081101561098457600080fd5b505110610992579050610a72565b6004805460408051635c0483f960e11b815290516001600160a01b039092169263b80907f2928282019260209290829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051630238d35960e41b815290516001600160a01b039092169163238d359091600480820192602092909190829003018186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b50510190505b90565b6000610a8284848461186c565b6001600160a01b038416600090815260026020908152604080832033808552925290912054610ac2918691610abd908663ffffffff61185716565b611752565b5060019392505050565b60016020526000908152604090205481565b601281565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61183e16565b600260209081526000928352604080842090915290825290205481565b6000808211610b4a57600080fd5b600354604051631d29b8bb60e11b81526020600482018181528651602484015286516000946001600160a01b031693633a5371769389939283926044019180860191028083838b5b83811015610baa578181015183820152602001610b92565b5050505090500192505050602060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050506040513d6020811015610bf957600080fd5b505160408051635c0483f960e11b815290519192506000916001600160a01b0384169163b80907f2916004808301926020929190829003018186803b158015610c4157600080fd5b505afa158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b50519050610c7933856119bb565b5060408051632830728d60e21b81523360048201526024810186905290516001600160a01b0383169163a0c1ca349160448083019260209291908290030181600087803b158015610cc957600080fd5b505af1158015610cdd573d6000803e3d6000fd5b505050506040513d6020811015610cf357600080fd5b5060019695505050505050565b6008546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600354604080516301ba1fa360e01b815233600482015290516000926001600160a01b0316916301ba1fa3916024808301926020929190829003018186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d6020811015610d9f57600080fd5b5051610daa57600080fd5b610ac284848461186c565b6004546000906001600160a01b031615610dce57600080fd5b600654604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610e1957600080fd5b505afa158015610e2d573d6000803e3d6000fd5b505050506040513d6020811015610e4357600080fd5b5051600654604080516323b872dd60e01b8152336004820152600160248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b5051610ed857600080fd5b610ee233826119d1565b50600191505090565b6006546001600160a01b031690565b6007546001600160a01b031681565b6003546001600160a01b031690565b60055490565b6007546040805163f39ec1f760e01b81526814995c14de5b589bdb60ba1b600482015290516060926001600160a01b03169163f39ec1f7916024808301926020929190829003018186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50516007546003546040805163213b363960e21b81526001600160a01b03938416600482015291831660248301525191909216916384ecd8e4916044808301926000929190829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561103557600080fd5b810190808051604051939291908464010000000082111561105557600080fd5b90830190602082018581111561106a57600080fd5b825164010000000081118282018810171561108457600080fd5b82525081516020918201929091019080838360005b838110156110b1578181015183820152602001611099565b50505050905090810190601f1680156110de5780820380516001836020036101000a031916815260200191505b50604052505050905090565b6004805460408051635c0483f960e11b815290516000936001600160a01b0390931692839263b80907f29281830192602092829003018186803b15801561113057600080fd5b505afa158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b50516001600160a01b0316331461117057600080fd5b806001600160a01b03166377e71ee56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a957600080fd5b505afa1580156111bd573d6000803e3d6000fd5b505050506040513d60208110156111d357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b50511061125057600080fd5b61125a84846119d1565b50600580548401905560408051631963b08360e31b815290516001600160a01b0383169163cb1d8418916004808301926020929190829003018186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d60208110156112cd57600080fd5b505160408051638d4e408360e01b815290516001600160a01b0390921691638d4e408391600480820192602092909190829003018186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051610ac257806001600160a01b031663f7095d9d600360009054906101000a90046001600160a01b03166001600160a01b031663c38c0fa76040518163ffffffff1660e01b815260040160206040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d60208110156113c857600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092525160248083019260209291908290030181600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b50505060019392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61185716565b60006106ef33848461186c565b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b1580156114d357600080fd5b505afa1580156114e7573d6000803e3d6000fd5b505050506040513d60208110156114fd57600080fd5b505161150857600080fd5b6106ef33836119bb565b6003546040805163f76514c760e01b815233600482015290516000926001600160a01b03169163f76514c7916024808301926020929190829003018186803b158015610d7557600080fd5b6006546001600160a01b031681565b600480546040805163f76514c760e01b8152339381018490529051600093926001600160a01b03169163f76514c7916024808301926020929190829003018186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d60208110156115e457600080fd5b50516115ef57600080fd5b6000600561160485600263ffffffff6119e716565b8161160b57fe5b04905061161882826119d1565b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6008546000906001600160a01b0316331461166857600080fd5b61167282846119d1565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639ab448d96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b505050506040513d602081101561161857600080fd5b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b158015610d7557600080fd5b6003546000906001600160a01b03163314610daa57600080fd5b6001600160a01b0383166117975760405162461bcd60e51b8152600401808060200182810382526024815260200180611e5c6024913960400191505060405180910390fd5b6001600160a01b0382166117dc5760405162461bcd60e51b8152600401808060200182810382526022815260200180611df46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008282018381101561185057600080fd5b9392505050565b60008282111561186657600080fd5b50900390565b6001600160a01b0383166118b15760405162461bcd60e51b8152600401808060200182810382526025815260200180611e376025913960400191505060405180910390fd5b6001600160a01b0382166118f65760405162461bcd60e51b8152600401808060200182810382526023815260200180611dd16023913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604090205461191f908263ffffffff61185716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611954908263ffffffff61183e16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36119b6838383611a0e565b505050565b60006119c78383611acc565b6106ef8383611baf565b60006119dd8383611c5f565b6106ef8383611d50565b6000826119f6575060006106f3565b82820282848281611a0357fe5b041461185057600080fd5b6007546003546001600160a01b038581166000818152600160209081526040808320548986168085528285205483516370e33c7f60e11b815298881660048a01526024890196909652604488015260648701899052608487015260a48601939093529151929094169363e1c678fe9360c48082019492918390030190829087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b505050506040513d6020811015611ac557600080fd5b5050505050565b6001600160a01b038216611b115760405162461bcd60e51b8152600401808060200182810382526021815260200180611e166021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902054611b3a908263ffffffff61185716565b6001600160a01b03831660009081526001602052604081209190915554611b67908263ffffffff61185716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151631efee74160e11b81529785166004890152602488019390935260448701899052606487019490945260848601919091529151941693633dfdce829360a480820194918390030190829087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d6020811015611c5957600080fd5b50505050565b6001600160a01b038216611cba576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600054611ccd908263ffffffff61183e16565b60009081556001600160a01b038316815260016020526040902054611cf8908263ffffffff61183e16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151636b39d6cb60e11b8152978516600489015260248801939093526044870189905260648701949094526084860191909152915194169363d673ad969360a480820194918390030190829087803b158015611c2f57600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f64736f6c634300050f003200000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063774692751161010f578063ae3816ee116100a2578063dd62ed3e11610071578063dd62ed3e146105f6578063e1897b5914610624578063f22b258a14610650578063fe98184d14610686576101e5565b8063ae3816ee1461057e578063b873e9a71461059b578063d5466777146105d1578063db054134146105d9576101e5565b806395d89b41116100de57806395d89b41146104f2578063a0c1ca34146104fa578063a457c2d714610526578063a9059cbb14610552576101e5565b806377469275146104d25780637a0d8f8a146104da578063870c426d146104e257806391d76bbb146104ea576101e5565b8063313ce567116101875780635bd5ea71116101565780635bd5ea711461046657806370a082311461046e578063721bb1701461049457806375d9aa1a146104ca576101e5565b8063313ce56714610349578063395093511461036757806355b6ed5c146103935780635b66876a146103c1576101e5565b8063183636c5116101c3578063183636c5146102c1578063238d3590146102e557806323b872dd146102ed57806327e235e314610323576101e5565b806306fdde03146101ea578063095ea7b31461026757806318160ddd146102a7575b600080fd5b6101f26106bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b0381351690602001356106e2565b604080519115158252519081900360200190f35b6102af6106f9565b60408051918252519081900360200190f35b6102c96106ff565b604080516001600160a01b039092168252519081900360200190f35b6102af61070e565b6102936004803603606081101561030357600080fd5b506001600160a01b03813581169160208101359091169060400135610a75565b6102af6004803603602081101561033957600080fd5b50356001600160a01b0316610acc565b610351610ade565b6040805160ff9092168252519081900360200190f35b6102936004803603604081101561037d57600080fd5b506001600160a01b038135169060200135610ae3565b6102af600480360360408110156103a957600080fd5b506001600160a01b0381358116916020013516610b1f565b610293600480360360408110156103d757600080fd5b8101906020810181356401000000008111156103f257600080fd5b82018360208201111561040457600080fd5b8035906020019184602083028401116401000000008311171561042657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610b3c915050565b6102c9610d00565b6102af6004803603602081101561048457600080fd5b50356001600160a01b0316610d0f565b610293600480360360608110156104aa57600080fd5b506001600160a01b03813581169160208101359091169060400135610d2a565b610293610db5565b6102c9610eeb565b6102c9610efa565b6102c9610f09565b6102af610f18565b6101f2610f1e565b6102936004803603604081101561051057600080fd5b506001600160a01b0381351690602001356110ea565b6102936004803603604081101561053c57600080fd5b506001600160a01b03813516906020013561143f565b6102936004803603604081101561056857600080fd5b506001600160a01b03813516906020013561147b565b6102936004803603602081101561059457600080fd5b5035611488565b610293600480360360608110156105b157600080fd5b506001600160a01b03813581169160208101359091169060400135611512565b6102c961155d565b610293600480360360208110156105ef57600080fd5b503561156c565b6102af6004803603604081101561060c57600080fd5b506001600160a01b0381358116916020013516611623565b6102936004803603604081101561063a57600080fd5b50803590602001356001600160a01b031661164e565b6102936004803603606081101561066657600080fd5b506001600160a01b038135811691602081013590911690604001356116ed565b6102936004803603606081101561069c57600080fd5b506001600160a01b03813581169160208101359091169060400135611738565b6040518060400160405280600a8152602001692932b83aba30ba34b7b760b11b81525081565b60006106ef338484611752565b5060015b92915050565b60005481565b6004546001600160a01b031681565b600080546004546001600160a01b03166108a757600654604080516370a0823160e01b815260006004820152905161089f926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561076f57600080fd5b505afa158015610783573d6000803e3d6000fd5b505050506040513d602081101561079957600080fd5b5051600654604080516370a0823160e01b8152600160048201529051610893926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d602081101561081257600080fd5b5051600654604080516318160ddd60e01b81529051610893926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d602081101561088457600080fd5b5051869063ffffffff61183e16565b9063ffffffff61185716565b915050610a72565b60048054604080516377e71ee560e01b815290516001600160a01b03909216926377e71ee5928282019260209290829003018186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561095a57600080fd5b505afa15801561096e573d6000803e3d6000fd5b505050506040513d602081101561098457600080fd5b505110610992579050610a72565b6004805460408051635c0483f960e11b815290516001600160a01b039092169263b80907f2928282019260209290829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051630238d35960e41b815290516001600160a01b039092169163238d359091600480820192602092909190829003018186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b50510190505b90565b6000610a8284848461186c565b6001600160a01b038416600090815260026020908152604080832033808552925290912054610ac2918691610abd908663ffffffff61185716565b611752565b5060019392505050565b60016020526000908152604090205481565b601281565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61183e16565b600260209081526000928352604080842090915290825290205481565b6000808211610b4a57600080fd5b600354604051631d29b8bb60e11b81526020600482018181528651602484015286516000946001600160a01b031693633a5371769389939283926044019180860191028083838b5b83811015610baa578181015183820152602001610b92565b5050505090500192505050602060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b505050506040513d6020811015610bf957600080fd5b505160408051635c0483f960e11b815290519192506000916001600160a01b0384169163b80907f2916004808301926020929190829003018186803b158015610c4157600080fd5b505afa158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b50519050610c7933856119bb565b5060408051632830728d60e21b81523360048201526024810186905290516001600160a01b0383169163a0c1ca349160448083019260209291908290030181600087803b158015610cc957600080fd5b505af1158015610cdd573d6000803e3d6000fd5b505050506040513d6020811015610cf357600080fd5b5060019695505050505050565b6008546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b600354604080516301ba1fa360e01b815233600482015290516000926001600160a01b0316916301ba1fa3916024808301926020929190829003018186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d6020811015610d9f57600080fd5b5051610daa57600080fd5b610ac284848461186c565b6004546000906001600160a01b031615610dce57600080fd5b600654604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610e1957600080fd5b505afa158015610e2d573d6000803e3d6000fd5b505050506040513d6020811015610e4357600080fd5b5051600654604080516323b872dd60e01b8152336004820152600160248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b5051610ed857600080fd5b610ee233826119d1565b50600191505090565b6006546001600160a01b031690565b6007546001600160a01b031681565b6003546001600160a01b031690565b60055490565b6007546040805163f39ec1f760e01b81526814995c14de5b589bdb60ba1b600482015290516060926001600160a01b03169163f39ec1f7916024808301926020929190829003018186803b158015610f7557600080fd5b505afa158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50516007546003546040805163213b363960e21b81526001600160a01b03938416600482015291831660248301525191909216916384ecd8e4916044808301926000929190829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561103557600080fd5b810190808051604051939291908464010000000082111561105557600080fd5b90830190602082018581111561106a57600080fd5b825164010000000081118282018810171561108457600080fd5b82525081516020918201929091019080838360005b838110156110b1578181015183820152602001611099565b50505050905090810190601f1680156110de5780820380516001836020036101000a031916815260200191505b50604052505050905090565b6004805460408051635c0483f960e11b815290516000936001600160a01b0390931692839263b80907f29281830192602092829003018186803b15801561113057600080fd5b505afa158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b50516001600160a01b0316331461117057600080fd5b806001600160a01b03166377e71ee56040518163ffffffff1660e01b815260040160206040518083038186803b1580156111a957600080fd5b505afa1580156111bd573d6000803e3d6000fd5b505050506040513d60208110156111d357600080fd5b505160075460408051630c4761ab60e11b815290516001600160a01b039092169163188ec35691600480820192602092909190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b50511061125057600080fd5b61125a84846119d1565b50600580548401905560408051631963b08360e31b815290516001600160a01b0383169163cb1d8418916004808301926020929190829003018186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d60208110156112cd57600080fd5b505160408051638d4e408360e01b815290516001600160a01b0390921691638d4e408391600480820192602092909190829003018186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051610ac257806001600160a01b031663f7095d9d600360009054906101000a90046001600160a01b03166001600160a01b031663c38c0fa76040518163ffffffff1660e01b815260040160206040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d60208110156113c857600080fd5b5051604080516001600160e01b031960e085901b16815260048101929092525160248083019260209291908290030181600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d602081101561143357600080fd5b50505060019392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106ef918590610abd908663ffffffff61185716565b60006106ef33848461186c565b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b1580156114d357600080fd5b505afa1580156114e7573d6000803e3d6000fd5b505050506040513d60208110156114fd57600080fd5b505161150857600080fd5b6106ef33836119bb565b6003546040805163f76514c760e01b815233600482015290516000926001600160a01b03169163f76514c7916024808301926020929190829003018186803b158015610d7557600080fd5b6006546001600160a01b031681565b600480546040805163f76514c760e01b8152339381018490529051600093926001600160a01b03169163f76514c7916024808301926020929190829003018186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d60208110156115e457600080fd5b50516115ef57600080fd5b6000600561160485600263ffffffff6119e716565b8161160b57fe5b04905061161882826119d1565b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6008546000906001600160a01b0316331461166857600080fd5b61167282846119d1565b50600360009054906101000a90046001600160a01b03166001600160a01b0316639ab448d96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b505050506040513d602081101561161857600080fd5b60035460408051634fbf0dfb60e11b815233600482015290516000926001600160a01b031691639f7e1bf6916024808301926020929190829003018186803b158015610d7557600080fd5b6003546000906001600160a01b03163314610daa57600080fd5b6001600160a01b0383166117975760405162461bcd60e51b8152600401808060200182810382526024815260200180611e5c6024913960400191505060405180910390fd5b6001600160a01b0382166117dc5760405162461bcd60e51b8152600401808060200182810382526022815260200180611df46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008282018381101561185057600080fd5b9392505050565b60008282111561186657600080fd5b50900390565b6001600160a01b0383166118b15760405162461bcd60e51b8152600401808060200182810382526025815260200180611e376025913960400191505060405180910390fd5b6001600160a01b0382166118f65760405162461bcd60e51b8152600401808060200182810382526023815260200180611dd16023913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604090205461191f908263ffffffff61185716565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611954908263ffffffff61183e16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36119b6838383611a0e565b505050565b60006119c78383611acc565b6106ef8383611baf565b60006119dd8383611c5f565b6106ef8383611d50565b6000826119f6575060006106f3565b82820282848281611a0357fe5b041461185057600080fd5b6007546003546001600160a01b038581166000818152600160209081526040808320548986168085528285205483516370e33c7f60e11b815298881660048a01526024890196909652604488015260648701899052608487015260a48601939093529151929094169363e1c678fe9360c48082019492918390030190829087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b505050506040513d6020811015611ac557600080fd5b5050505050565b6001600160a01b038216611b115760405162461bcd60e51b8152600401808060200182810382526021815260200180611e166021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902054611b3a908263ffffffff61185716565b6001600160a01b03831660009081526001602052604081209190915554611b67908263ffffffff61185716565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151631efee74160e11b81529785166004890152602488019390935260448701899052606487019490945260848601919091529151941693633dfdce829360a480820194918390030190829087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d6020811015611c5957600080fd5b50505050565b6001600160a01b038216611cba576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600054611ccd908263ffffffff61183e16565b60009081556001600160a01b038316815260016020526040902054611cf8908263ffffffff61183e16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600754600354600080546001600160a01b03868116808452600160209081526040808620548151636b39d6cb60e11b8152978516600489015260248801939093526044870189905260648701949094526084860191909152915194169363d673ad969360a480820194918390030190829087803b158015611c2f57600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a72315820639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f64736f6c634300050f0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _augur (address): 0x23916a8F5C3846e3100e5f587FF14F3098722F5d
Arg [1] : _universe (address): 0x49244BD018Ca9fd1f06ecC07B9E9De773246e5AA
Arg [2] : _parentUniverse (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000023916a8f5c3846e3100e5f587ff14f3098722f5d
Arg [1] : 00000000000000000000000049244bd018ca9fd1f06ecc07b9e9de773246e5aa
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
53521:6999:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53521:6999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53635:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53635:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17996:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17996:151:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16986:26;;;:::i;:::-;;;;;;;;;;;;;;;;53716:31;;;:::i;:::-;;;;-1:-1:-1;;;;;53716:31:0;;;;;;;;;;;;;;58863:552;;;:::i;18605:260::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18605:260:0;;;;;;;;;;;;;;;;;:::i;17019:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17019:44:0;-1:-1:-1;;;;;17019:44:0;;:::i;16944:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19260:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19260:207:0;;;;;;;;:::i;17070:67::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17070:67:0;;;;;;;;;;:::i;54742:438::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;54742:438:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;54742:438:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54742:438:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;54742:438:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;54742:438:0;;-1:-1:-1;;54742:438:0;;;-1:-1:-1;54742:438:0;;-1:-1:-1;;54742:438:0:i;53848:23::-;;;:::i;17196:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17196:109:0;-1:-1:-1;;;;;17196:109:0;;:::i;57660:286::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57660:286:0;;;;;;;;;;;;;;;;;:::i;60176:342::-;;;:::i;58671:96::-;;;:::i;53823:19::-;;;:::i;58333:87::-;;;:::i;58522:95::-;;;:::i;54275:163::-;;;:::i;55186:648::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;55186:648:0;;;;;;;;:::i;19954:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19954:217:0;;;;;;;;:::i;17508:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17508:157:0;;;;;;;;:::i;56608:206::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56608:206:0;;:::i;57347:307::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57347:307:0;;;;;;;;;;;;;;;;;:::i;53789:28::-;;;:::i;55840:525::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55840:525:0;;:::i;17723:135::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17723:135:0;;;;;;;;;;:::i;56371:231::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56371:231:0;;;;;;-1:-1:-1;;;;;56371:231:0;;:::i;57076:265::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;57076:265:0;;;;;;;;;;;;;;;;;:::i;56820:250::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;56820:250:0;;;;;;;;;;;;;;;;;:::i;53635:42::-;;;;;;;;;;;;;;-1:-1:-1;;;53635:42:0;;;;:::o;17996:151::-;18064:4;18080:39;18089:10;18101:8;18111:7;18080:8;:39::i;:::-;-1:-1:-1;18136:4:0;17996:151;;;;;:::o;16986:26::-;;;;:::o;53716:31::-;;;-1:-1:-1;;;;;53716:31:0;;:::o;58863:552::-;58921:7;58963:11;;58988:14;;-1:-1:-1;;;;;58988:14:0;58984:425;;59134:14;;:36;;;-1:-1:-1;;;59134:36:0;;:14;:36;;;;;;59041:130;;-1:-1:-1;;;;;59134:14:0;;:24;;:36;;;;;;;;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;59134:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59134:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59134:36:0;59092:14;;:36;;;-1:-1:-1;;;59092:36:0;;:14;:36;;;;;;59041:88;;-1:-1:-1;;;;;59092:14:0;;:24;;:36;;;;;59134;;59092;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;59092:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59092:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59092:36:0;59058:14;;:28;;;-1:-1:-1;;;59058:28:0;;;;59041:46;;-1:-1:-1;;;;;59058:14:0;;:26;;:28;;;;;59092:36;;59058:28;;;;;;;:14;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;59058:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59058:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59058:28:0;59041:12;;:46;:16;:46;:::i;:::-;:50;:88;:50;:88;:::i;:130::-;59034:137;;;;;58984:425;59216:14;;;:31;;;-1:-1:-1;;;59216:31:0;;;;-1:-1:-1;;;;;59216:14:0;;;;:29;;:31;;;;;;;;;;;;:14;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;59216:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59216:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59216:31:0;59192:5;;:20;;;-1:-1:-1;;;59192:20:0;;;;-1:-1:-1;;;;;59192:5:0;;;;:18;;:20;;;;;59216:31;;59192:20;;;;;;;;:5;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;59192:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59192:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59192:20:0;:55;59188:221;;59270:12;-1:-1:-1;59263:19:0;;59188:221;59335:14;;;:35;;;-1:-1:-1;;;59335:35:0;;;;-1:-1:-1;;;;;59335:14:0;;;;:33;;:35;;;;;;;;;;;;:14;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;59335:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59335:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59335:35:0;:63;;;-1:-1:-1;;;59335:63:0;;;;-1:-1:-1;;;;;59335:61:0;;;;;;:63;;;;;:35;;:63;;;;;;;;:61;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;59335:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59335:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;59335:63:0;59320:78;;-1:-1:-1;58863:552:0;;:::o;18605:260::-;18697:4;18713:39;18723:7;18732:10;18744:7;18713:9;:39::i;:::-;-1:-1:-1;;;;;18792:19:0;;;;;;:10;:19;;;;;;;;18780:10;18792:31;;;;;;;;;18762:75;;18771:7;;18792:44;;18828:7;18792:44;:35;:44;:::i;:::-;18762:8;:75::i;:::-;-1:-1:-1;18854:4:0;18605:260;;;;;:::o;17019:44::-;;;;;;;;;;;;;:::o;16944:35::-;16977:2;16944:35;:::o;19260:207::-;19367:10;19342:4;19389:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;19389:32:0;;;;;;;;;;19342:4;;19358:81;;19379:8;;19389:49;;19426:11;19389:49;:36;:49;:::i;17070:67::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;54742:438::-;54843:4;54881:1;54867:11;:15;54859:24;;;;;;54926:8;;:47;;-1:-1:-1;;;54926:47:0;;;;;;;;;;;;;;;;;54893:30;;-1:-1:-1;;;;;54926:8:0;;:28;;54955:17;;54926:47;;;;;;;;;;;;;;54893:30;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54926:47:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;54926:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54926:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54926:47:0;55015:41;;;-1:-1:-1;;;55015:41:0;;;;54926:47;;-1:-1:-1;54983:29:0;;-1:-1:-1;;;;;55015:39:0;;;;;:41;;;;;54926:47;;55015:41;;;;;;;:39;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;55015:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55015:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55015:41:0;;-1:-1:-1;55066:29:0;55071:10;55083:11;55066:4;:29::i;:::-;-1:-1:-1;55105:47:0;;;-1:-1:-1;;;55105:47:0;;55128:10;55105:47;;;;;;;;;;;;-1:-1:-1;;;;;55105:22:0;;;;;:47;;;;;;;;;;;;;;-1:-1:-1;55105:22:0;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;55105:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55105:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55169:4:0;;54742:438;-1:-1:-1;;;;;;54742:438:0:o;53848:23::-;;;-1:-1:-1;;;;;53848:23:0;;:::o;17196:109::-;-1:-1:-1;;;;;17280:18:0;17254:7;17280:18;;;:8;:18;;;;;;;17196:109::o;57660:286::-;57798:8;;:64;;;-1:-1:-1;;;57798:64:0;;57850:10;57798:64;;;;;;57774:4;;-1:-1:-1;;;;;57798:8:0;;:36;;:64;;;;;;;;;;;;;;:8;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;57798:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57798:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;57798:64:0;57790:73;;;;;;57873:45;57883:7;57892:12;57906:11;57873:9;:45::i;60176:342::-;60260:14;;60236:4;;-1:-1:-1;;;;;60260:14:0;:30;60252:39;;;;;;60326:14;;:36;;;-1:-1:-1;;;60326:36:0;;60351:10;60326:36;;;;;;60301:22;;-1:-1:-1;;;;;60326:14:0;;:24;;:36;;;;;;;;;;;;;;:14;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;60326:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60326:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60326:36:0;60380:14;;:67;;;-1:-1:-1;;;60380:67:0;;60408:10;60380:67;;;;:14;:67;;;;;;;;;;;;60326:36;;-1:-1:-1;;;;;;60380:14:0;;;;:27;;:67;;;;;60326:36;;60380:67;;;;;;;;:14;;:67;;;5:2:-1;;;;30:1;27;20:12;5:2;60380:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;60380:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;60380:67:0;60372:76;;;;;;60458:32;60463:10;60475:14;60458:4;:32::i;:::-;;60507:4;60500:11;;;60176:342;:::o;58671:96::-;58746:14;;-1:-1:-1;;;;;58746:14:0;58671:96;:::o;53823:19::-;;;-1:-1:-1;;;;;53823:19:0;;:::o;58333:87::-;58405:8;;-1:-1:-1;;;;;58405:8:0;58333:87;:::o;58522:95::-;58597:13;;58522:95;:::o;54275:163::-;54357:5;;:25;;;-1:-1:-1;;;54357:25:0;;-1:-1:-1;;;54357:25:0;;;;;;54314:13;;-1:-1:-1;;;;;54357:5:0;;:12;;:25;;;;;;;;;;;;;;:5;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;54357:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54357:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54357:25:0;54405:5;;54421:8;;54346:85;;;-1:-1:-1;;;54346:85:0;;-1:-1:-1;;;;;54405:5:0;;;54346:85;;;;54421:8;;;54346:85;;;;;:50;;;;;;;:85;;;;;54405:5;;54346:85;;;;;;;:50;:85;;;5:2:-1;;;;30:1;27;20:12;5:2;54346:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54346:85:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;54346:85:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;54346:85:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;54346:85:0;;420:4:-1;411:14;;;;54346:85:0;;;;;411:14:-1;54346:85:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54346:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54339:92;;54275:163;:::o;55186:648::-;55305:14;;;55368:36;;;-1:-1:-1;;;55368:36:0;;;;55261:4;;-1:-1:-1;;;;;55305:14:0;;;;;;55368:34;;:36;;;;;;;;;;;55305:14;55368:36;;;5:2:-1;;;;30:1;27;20:12;5:2;55368:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55368:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55368:36:0;-1:-1:-1;;;;;55337:67:0;55353:10;55337:67;55329:76;;;;;;55446:15;-1:-1:-1;;;;;55446:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55446:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55446:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55446:32:0;55423:5;;:20;;;-1:-1:-1;;;55423:20:0;;;;-1:-1:-1;;;;;55423:5:0;;;;:18;;:20;;;;;55446:32;;55423:20;;;;;;;;:5;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;55423:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55423:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55423:20:0;:55;55415:64;;;;;;55489:28;55494:9;55505:11;55489:4;:28::i;:::-;-1:-1:-1;55527:13:0;:28;;;;;;55637:34;;;-1:-1:-1;;;55637:34:0;;;;-1:-1:-1;;;;;55637:32:0;;;;;:34;;;;;;;;;;;;;;:32;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;55637:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55637:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55637:34:0;:48;;;-1:-1:-1;;;55637:48:0;;;;-1:-1:-1;;;;;55637:46:0;;;;;;:48;;;;;:34;;:48;;;;;;;;:46;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;55637:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55637:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55637:48:0;55632:175;;55701:15;-1:-1:-1;;;;;55701:51:0;;55753:8;;;;;;;;;-1:-1:-1;;;;;55753:8:0;-1:-1:-1;;;;;55753:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55753:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55753:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55753:42:0;55701:95;;;-1:-1:-1;;;;;;55701:95:0;;;;;;;;;;;;;;;;;;;;55753:42;;55701:95;;;;;;;-1:-1:-1;55701:95:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;55701:95:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55701:95:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;55823:4:0;;55186:648;-1:-1:-1;;;55186:648:0:o;19954:217::-;20066:10;20041:4;20088:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;20088:32:0;;;;;;;;;;20041:4;;20057:86;;20078:8;;20088:54;;20125:16;20088:54;:36;:54;:::i;17508:157::-;17579:4;17595:42;17605:10;17617;17629:7;17595:9;:42::i;56608:206::-;56694:8;;:50;;;-1:-1:-1;;;56694:50:0;;56732:10;56694:50;;;;;;56670:4;;-1:-1:-1;;;;;56694:8:0;;:29;;:50;;;;;;;;;;;;;;:8;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;56694:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56694:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56694:50:0;56686:59;;;;;;56755:31;56760:10;56772:13;56755:4;:31::i;57347:307::-;57492:8;;:78;;;-1:-1:-1;;;57492:78:0;;57558:10;57492:78;;;;;;57468:4;;-1:-1:-1;;;;;57492:8:0;;:43;;:78;;;;;;;;;;;;;;:8;:78;;;5:2:-1;;;;30:1;27;20:12;53789:28:0;;;-1:-1:-1;;;;;53789:28:0;;:::o;55840:525::-;56031:14;;;:72;;;-1:-1:-1;;;56031:72:0;;56002:10;56031:72;;;;;;;;55918:4;;56002:10;-1:-1:-1;;;;;56031:14:0;;:49;;:72;;;;;;;;;;;;;;:14;:72;;;5:2:-1;;;;30:1;27;20:12;5:2;56031:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56031:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56031:72:0;56023:81;;;;;;56240:14;56282:1;56257:22;:15;56277:1;56257:22;:19;:22;:::i;:::-;:26;;;;;;56240:43;;56293:44;56306:21;56330:6;56293:4;:44::i;:::-;-1:-1:-1;56354:4:0;;55840:525;-1:-1:-1;;;;55840:525:0:o;17723:135::-;-1:-1:-1;;;;;17823:18:0;;;17797:7;17823:18;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;17723:135::o;56371:231::-;56476:8;;56452:4;;-1:-1:-1;;;;;56476:8:0;56488:10;56476:22;56468:31;;;;;;56509:28;56514:7;56523:13;56509:4;:28::i;:::-;;56547:8;;;;;;;;;-1:-1:-1;;;;;56547:8:0;-1:-1:-1;;;;;56547:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56547:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56547:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;57076:265:0;57207:8;;:50;;;-1:-1:-1;;;57207:50:0;;57245:10;57207:50;;;;;;57183:4;;-1:-1:-1;;;;;57207:8:0;;:29;;:50;;;;;;;;;;;;;;:8;:50;;;5:2:-1;;;;30:1;27;20:12;56820:250:0;56978:8;;56929:4;;-1:-1:-1;;;;;56978:8:0;56963:10;56953:33;56945:42;;;;;22762:342;-1:-1:-1;;;;;22858:20:0;;22850:69;;;;-1:-1:-1;;;22850:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22937:22:0;;22929:69;;;;-1:-1:-1;;;22929:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23009:18:0;;;;;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;:38;;;23062:35;;;;;;;;;;;;;;;;;22762:342;;;:::o;8269:144::-;8327:7;8358:5;;;8381:6;;;;8373:15;;;;;;8405:1;8269:144;-1:-1:-1;;;8269:144:0:o;8142:121::-;8200:7;8232:1;8227;:6;;8219:15;;;;;;-1:-1:-1;8251:5:0;;;8142:121::o;20645:487::-;-1:-1:-1;;;;;20745:21:0;;20737:71;;;;-1:-1:-1;;;20737:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20826:24:0;;20818:72;;;;-1:-1:-1;;;20818:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20921:17:0;;;;;;:8;:17;;;;;;:30;;20943:7;20921:30;:21;:30;:::i;:::-;-1:-1:-1;;;;;20901:17:0;;;;;;;:8;:17;;;;;;:50;;;;20984:20;;;;;;;:33;;21009:7;20984:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;20961:20:0;;;;;;;:8;:20;;;;;;;;;:56;;;;21032:38;;;;;;;20961:20;;21032:38;;;;;;;;;;;;;21080:45;21096:7;21105:10;21117:7;21080:15;:45::i;:::-;20645:487;;;:::o;23940:167::-;24006:4;24022:23;24028:7;24037;24022:5;:23::i;:::-;24055:24;24062:7;24071;24055:6;:24::i;23767:167::-;23833:4;23849:23;23855:7;23864;23849:5;:23::i;:::-;23882:24;23889:7;23898;23882:6;:24::i;7426:421::-;7484:7;7724:6;7720:45;;-1:-1:-1;7753:1:0;7746:8;;7720:45;7787:5;;;7791:1;7787;:5;:1;7810:5;;;;;:10;7802:19;;;;;59421:193;59509:5;;59546:8;;-1:-1:-1;;;;;59576:15:0;;;59509:5;59576:15;;;59509:5;59576:15;;;;;;;;;59593:13;;;;;;;;;;59509:98;;-1:-1:-1;;;59509:98:0;;59546:8;;;59509:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;;;:36;;:98;;;;;;;;;;;;;;:5;:98;;;5:2:-1;;;;30:1;27;20:12;5:2;59509:98:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59509:98:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;59421:193:0:o;22028:309::-;-1:-1:-1;;;;;22105:22:0;;22097:68;;;;-1:-1:-1;;;22097:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22197:18:0;;;;;;:8;:18;;;;;;:31;;22220:7;22197:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;22176:18:0;;;;;;:8;:18;;;;;:52;;;;22252:11;:24;;22268:7;22252:24;:15;:24;:::i;:::-;22238:11;:38;;;22291:39;;;;;;;;-1:-1:-1;;;;;22291:39:0;;;;;;;;;;;;;22028:309;;:::o;59793:167::-;59862:5;;59894:8;;59862:5;59922:11;;-1:-1:-1;;;;;59935:17:0;;;;;;59862:5;59935:17;;;;;;;;;59862:91;;-1:-1:-1;;;59862:91:0;;59894:8;;;59862:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;:31;;:91;;;;;;;;;;;;;:5;:91;;;5:2:-1;;;;30:1;27;20:12;5:2;59862:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59862:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;59793:167:0:o;21402:307::-;-1:-1:-1;;;;;21479:22:0;;21471:66;;;;;-1:-1:-1;;;21471:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21562:11;;:24;;21578:7;21562:24;:15;:24;:::i;:::-;21548:11;:38;;;-1:-1:-1;;;;;21617:18:0;;;;:8;:18;;;;;;:31;;21640:7;21617:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;21596:18:0;;;;;;:8;:18;;;;;;;;:52;;;;21663:39;;;;;;;21596:18;;;;21663:39;;;;;;;;;;21402:307;;:::o;59620:167::-;59689:5;;59721:8;;59689:5;59749:11;;-1:-1:-1;;;;;59762:17:0;;;;;;59689:5;59762:17;;;;;;;;;59689:91;;-1:-1:-1;;;59689:91:0;;59721:8;;;59689:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;;;:31;;:91;;;;;;;;;;;;;:5;:91;;;5:2:-1;;;;30:1;27;20:12
Swarm Source
bzzr://639a17082bb841ef885557bfd4f939fda1d15d9ef9da41800995126dccd4ef0f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.