Amoy Testnet

Contract

0xC866DB9021fe81856fF6c5B3E3514BF9D1593D81

Overview

POL Balance

Polygon PoS Chain Amoy LogoPolygon PoS Chain Amoy LogoPolygon PoS Chain Amoy Logo0 POL

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Approve157589282024-12-18 14:39:4328 days ago1734532783IN
0xC866DB90...9D1593D81
0 POL0.0008769930.00000001
Approve151864132024-12-03 14:57:4343 days ago1733237863IN
0xC866DB90...9D1593D81
0 POL0.0015871260.04329101
Approve146600472024-11-20 14:53:3556 days ago1732114415IN
0xC866DB90...9D1593D81
0 POL0.0023707981.0999249
Approve146597022024-11-20 14:41:2356 days ago1732113683IN
0xC866DB90...9D1593D81
0 POL0.0023707981.0999249
Approve145895532024-11-18 20:38:4758 days ago1731962327IN
0xC866DB90...9D1593D81
0 POL0.0018714964.02
Approve145895382024-11-18 20:38:1558 days ago1731962295IN
0xC866DB90...9D1593D81
0 POL0.0029662364.02
Approve145894852024-11-18 20:36:2158 days ago1731962181IN
0xC866DB90...9D1593D81
0 POL0.002995964.6602
Approve141167032024-11-07 2:38:3870 days ago1730947118IN
0xC866DB90...9D1593D81
0 POL0.0021123245.59
Approve141166442024-11-07 2:36:3470 days ago1730946994IN
0xC866DB90...9D1593D81
0 POL0.0013932330.07000001
Approve140988762024-11-06 16:07:1270 days ago1730909232IN
0xC866DB90...9D1593D81
0 POL0.0028536497.6171625
Deposit Stake140978222024-11-06 15:29:5270 days ago1730906992IN
0xC866DB90...9D1593D81
0 POL0.0011825630.67625
Approve140977992024-11-06 15:29:0470 days ago1730906944IN
0xC866DB90...9D1593D81
0 POL0.0041117288.742875
Faucet140975992024-11-06 15:21:5870 days ago1730906518IN
0xC866DB90...9D1593D81
0 POL0.0030201888.742875
Faucet140578212024-11-05 15:52:5071 days ago1730821970IN
0xC866DB90...9D1593D81
0 POL0.0015685630.67625
Approve132862992024-10-17 15:30:4190 days ago1729179041IN
0xC866DB90...9D1593D81
0 POL0.0016058134.65822183
Approve126501822024-10-01 14:57:02106 days ago1727794622IN
0xC866DB90...9D1593D81
0 POL0.0011094837.95312499
Approve112755532024-08-28 13:56:22140 days ago1724853382IN
0xC866DB90...9D1593D81
0 POL0.0013479429.10000001
Approve99173122024-07-25 14:26:31174 days ago1721917591IN
0xC866DB90...9D1593D81
0 POL0.0009646833
Approve98342952024-07-23 13:20:20176 days ago1721740820IN
0xC866DB90...9D1593D81
0 POL0.0021283145.94706938
Faucet98270912024-07-23 9:05:12177 days ago1721725512IN
0xC866DB90...9D1593D81
0 POL0.0029759458.2
Approve94774622024-07-14 18:17:47185 days ago1720981067IN
0xC866DB90...9D1593D81
0 POL0.0013482929.10000001
Faucet94764552024-07-14 17:42:07185 days ago1720978927IN
0xC866DB90...9D1593D81
0 POL0.0009903629.10000001
Faucet94764512024-07-14 17:41:59185 days ago1720978919IN
0xC866DB90...9D1593D81
0 POL0.0019343637.83000001
Transfer90622242024-07-04 13:02:40196 days ago1720098160IN
0xC866DB90...9D1593D81
0 POL0.0010164829.48384535
Transfer90609922024-07-04 12:18:57196 days ago1720095537IN
0xC866DB90...9D1593D81
0 POL0.000077381.50000001
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TellorPlayground

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at amoy.polygonscan.com on 2024-04-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TellorPlayground {
    // Events
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event NewReport(
        bytes32 _queryId,
        uint256 _time,
        bytes _value,
        uint256 _nonce,
        bytes _queryData,
        address _reporter
    );
    event NewStaker(address _staker, uint256 _amount);
    event StakeWithdrawRequested(address _staker, uint256 _amount);
    event StakeWithdrawn(address _staker);
    event Transfer(address indexed from, address indexed to, uint256 value);

    // Storage
    mapping(bytes32 => mapping(uint256 => bool)) public isDisputed; //queryId -> timestamp -> value
    mapping(bytes32 => mapping(uint256 => address)) public reporterByTimestamp;
    mapping(address => StakeInfo) stakerDetails; //mapping from a persons address to their staking info
    mapping(bytes32 => uint256[]) public timestamps;
    mapping(bytes32 => uint256) public tips; // mapping of data IDs to the amount of TRB they are tipped
    mapping(bytes32 => mapping(uint256 => bytes)) public values; //queryId -> timestamp -> value
    mapping(bytes32 => uint256[]) public voteRounds; // mapping of vote identifier hashes to an array of dispute IDs
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;

    uint256 public stakeAmount;
    uint256 public constant timeBasedReward = 5e17; // time based reward for a reporter for successfully submitting a value
    uint256 public tipsInContract; // number of tips within the contract
    uint256 public voteCount;
    address public token;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    // Structs
    struct StakeInfo {
        uint256 startDate; //stake start date
        uint256 stakedBalance; // staked balance
        uint256 lockedBalance; // amount locked for withdrawal
        uint256 reporterLastTimestamp; // timestamp of reporter's last reported value
        uint256 reportsSubmitted; // total number of reports submitted by reporter
    }

    // Functions
    /**
     * @dev Initializes playground parameters
     */
    constructor() {
        _name = "TellorPlayground";
        _symbol = "TRBP";
        _decimals = 18;
        token = address(this);
    }

    /**
     * @dev Mock function for adding staking rewards. No rewards actually given to stakers
     * @param _amount Amount of TRB to be added to the contract
     */
    function addStakingRewards(uint256 _amount) external {
        require(_transferFrom(msg.sender, address(this), _amount));
    }

    /**
     * @dev Approves amount that an address is alowed to spend of behalf of another
     * @param _spender The address which is allowed to spend the tokens
     * @param _amount The amount that msg.sender is allowing spender to use
     * @return bool Whether the transaction succeeded
     *
     */
    function approve(address _spender, uint256 _amount) external returns (bool){
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    /**
     * @dev A mock function to create a dispute
     * @param _queryId The tellorId to be disputed
     * @param _timestamp the timestamp of the value to be disputed
     */
    function beginDispute(bytes32 _queryId, uint256 _timestamp) external {
        values[_queryId][_timestamp] = bytes("");
        isDisputed[_queryId][_timestamp] = true;
        voteCount++;
        voteRounds[keccak256(abi.encodePacked(_queryId, _timestamp))].push(
            voteCount
        );
    }

    /**
     * @dev Allows a reporter to submit stake
     * @param _amount amount of tokens to stake
     */
    function depositStake(uint256 _amount) external {
        StakeInfo storage _staker = stakerDetails[msg.sender];
        if (_staker.lockedBalance > 0) {
            if (_staker.lockedBalance >= _amount) {
                _staker.lockedBalance -= _amount;
            } else {
                require(
                    _transferFrom(
                        msg.sender,
                        address(this),
                        _amount - _staker.lockedBalance
                    )
                );
                _staker.lockedBalance = 0;
            }
        } else {
            require(_transferFrom(msg.sender, address(this), _amount));
        }
        _staker.startDate = block.timestamp; // This resets their stake start date to now
        _staker.stakedBalance += _amount;
        emit NewStaker(msg.sender, _amount);
    }

    /**
     * @dev Public function to mint tokens to the given address
     * @param _user The address which will receive the tokens
     */
    function faucet(address _user) external {
        _mint(_user, 1000 ether);
    }

    /**
     * @dev Allows a reporter to request to withdraw their stake
     * @param _amount amount of staked tokens requesting to withdraw
     */
    function requestStakingWithdraw(uint256 _amount) external {
        StakeInfo storage _staker = stakerDetails[msg.sender];
        require(
            _staker.stakedBalance >= _amount,
            "insufficient staked balance"
        );
        _staker.startDate = block.timestamp;
        _staker.lockedBalance += _amount;
        _staker.stakedBalance -= _amount;
        emit StakeWithdrawRequested(msg.sender, _amount);
    }

    /**
     * @dev A mock function to submit a value to be read without reporter staking needed
     * @param _queryId the ID to associate the value to
     * @param _value the value for the queryId
     * @param _nonce the current value count for the query id
     * @param _queryData the data used by reporters to fulfill the data query
     */
    // slither-disable-next-line timestamp
    function submitValue(
        bytes32 _queryId,
        bytes calldata _value,
        uint256 _nonce,
        bytes memory _queryData
    ) external {
        require(keccak256(_value) != keccak256(""), "value must be submitted");
        require(
            _nonce == timestamps[_queryId].length || _nonce == 0,
            "nonce must match timestamp index"
        );
        require(
            _queryId == keccak256(_queryData) || uint256(_queryId) <= 100,
            "id must be hash of bytes data"
        );
        values[_queryId][block.timestamp] = _value;
        timestamps[_queryId].push(block.timestamp);
        reporterByTimestamp[_queryId][block.timestamp] = msg.sender;
        stakerDetails[msg.sender].reporterLastTimestamp = block.timestamp;
        stakerDetails[msg.sender].reportsSubmitted++;
        emit NewReport(
            _queryId,
            block.timestamp,
            _value,
            _nonce,
            _queryData,
            msg.sender
        );
    }

    /**
     * @dev Transfer tokens from one user to another
     * @param _recipient The destination address
     * @param _amount The amount of tokens, including decimals, to transfer
     * @return bool If the transfer succeeded
     */
    function transfer(address _recipient, uint256 _amount)
        public
        returns (bool)
    {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    /**
     * @dev Transfer tokens from user to another
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     * @return bool Whether the transfer succeeded
     */
    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) public returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(
            _sender,
            msg.sender,
            _allowances[_sender][msg.sender] - _amount
        );
        return true;
    }

    /**
     * @dev Withdraws a reporter's stake
     */
    function withdrawStake() external {
        StakeInfo storage _s = stakerDetails[msg.sender];
        // Ensure reporter is locked and that enough time has passed
        require(block.timestamp - _s.startDate >= 7 days, "7 days didn't pass");
        require(_s.lockedBalance > 0, "reporter not locked for withdrawal");
        _transfer(address(this), msg.sender, _s.lockedBalance);
        _s.lockedBalance = 0;
        emit StakeWithdrawn(msg.sender);
    }

    // Getters
    /**
     * @dev Returns the amount that an address is alowed to spend of behalf of another
     * @param _owner The address which owns the tokens
     * @param _spender The address that will use the tokens
     * @return uint256 The amount of allowed tokens
     */
    function allowance(address _owner, address _spender) external view returns (uint256){
        return _allowances[_owner][_spender];
    }

    /**
     * @dev Returns the balance of a given user.
     * @param _account user address
     * @return uint256 user's token balance
     */
    function balanceOf(address _account) external view returns (uint256) {
        return _balances[_account];
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * @return uint8 the number of decimals; used only for display purposes
     */
    function decimals() external view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Retrieves the latest value for the queryId before the specified timestamp
     * @param _queryId is the queryId to look up the value for
     * @param _timestamp before which to search for latest value
     * @return _ifRetrieve bool true if able to retrieve a non-zero value
     * @return _value the value retrieved
     * @return _timestampRetrieved the value's timestamp
     */
    function getDataBefore(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (
            bool _ifRetrieve,
            bytes memory _value,
            uint256 _timestampRetrieved
        )
    {
        (bool _found, uint256 _index) = getIndexForDataBefore(
            _queryId,
            _timestamp
        );
        if (!_found) return (false, bytes(""), 0);
        _timestampRetrieved = getTimestampbyQueryIdandIndex(_queryId, _index);
        _value = values[_queryId][_timestampRetrieved];
        return (true, _value, _timestampRetrieved);
    }

    /**
     * @dev Retrieves latest array index of data before the specified timestamp for the queryId
     * @param _queryId is the queryId to look up the index for
     * @param _timestamp is the timestamp before which to search for the latest index
     * @return _found whether the index was found
     * @return _index the latest index found before the specified timestamp
     */
    // slither-disable-next-line calls-loop
    function getIndexForDataBefore(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool _found, uint256 _index)
    {
        uint256 _count = getNewValueCountbyQueryId(_queryId);
        if (_count > 0) {
            uint256 _middle;
            uint256 _start = 0;
            uint256 _end = _count - 1;
            uint256 _time;
            //Checking Boundaries to short-circuit the algorithm
            _time = getTimestampbyQueryIdandIndex(_queryId, _start);
            if (_time >= _timestamp) return (false, 0);
            _time = getTimestampbyQueryIdandIndex(_queryId, _end);
            if (_time < _timestamp) {
                while (isInDispute(_queryId, _time) && _end > 0) {
                    _end--;
                    _time = getTimestampbyQueryIdandIndex(_queryId, _end);
                }
                if (_end == 0 && isInDispute(_queryId, _time)) {
                    return (false, 0);
                }
                return (true, _end);
            }
            //Since the value is within our boundaries, do a binary search
            while (true) {
                _middle = (_end - _start) / 2 + 1 + _start;
                _time = getTimestampbyQueryIdandIndex(_queryId, _middle);
                if (_time < _timestamp) {
                    //get immediate next value
                    uint256 _nextTime = getTimestampbyQueryIdandIndex(
                        _queryId,
                        _middle + 1
                    );
                    if (_nextTime >= _timestamp) {
                        if (!isInDispute(_queryId, _time)) {
                            // _time is correct
                            return (true, _middle);
                        } else {
                            // iterate backwards until we find a non-disputed value
                            while (
                                isInDispute(_queryId, _time) && _middle > 0
                            ) {
                                _middle--;
                                _time = getTimestampbyQueryIdandIndex(
                                    _queryId,
                                    _middle
                                );
                            }
                            if (_middle == 0 && isInDispute(_queryId, _time)) {
                                return (false, 0);
                            }
                            // _time is correct
                            return (true, _middle);
                        }
                    } else {
                        //look from middle + 1(next value) to end
                        _start = _middle + 1;
                    }
                } else {
                    uint256 _prevTime = getTimestampbyQueryIdandIndex(
                        _queryId,
                        _middle - 1
                    );
                    if (_prevTime < _timestamp) {
                        if (!isInDispute(_queryId, _prevTime)) {
                            // _prevTime is correct
                            return (true, _middle - 1);
                        } else {
                            // iterate backwards until we find a non-disputed value
                            _middle--;
                            while (
                                isInDispute(_queryId, _prevTime) && _middle > 0
                            ) {
                                _middle--;
                                _prevTime = getTimestampbyQueryIdandIndex(
                                    _queryId,
                                    _middle
                                );
                            }
                            if (
                                _middle == 0 && isInDispute(_queryId, _prevTime)
                            ) {
                                return (false, 0);
                            }
                            // _prevtime is correct
                            return (true, _middle);
                        }
                    } else {
                        //look from start to middle -1(prev value)
                        _end = _middle - 1;
                    }
                }
            }
        }
        return (false, 0);
    }

    /**
     * @dev Counts the number of values that have been submitted for a given ID
     * @param _queryId the ID to look up
     * @return uint256 count of the number of values received for the queryId
     */
    function getNewValueCountbyQueryId(bytes32 _queryId)
        public
        view
        returns (uint256)
    {
        return timestamps[_queryId].length;
    }

    /**
     * @dev Returns the reporter for a given timestamp and queryId
     * @param _queryId bytes32 version of the queryId
     * @param _timestamp uint256 timestamp of report
     * @return address of data reporter
     */
    function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (address)
    {
        return reporterByTimestamp[_queryId][_timestamp];
    }

    /**
     * @dev Returns mock stake amount
     * @return uint256 stake amount
     */
    function getStakeAmount() external view returns (uint256) {
        return stakeAmount;
    }

    /**
     * @dev Allows users to retrieve all information about a staker
     * @param _stakerAddress address of staker inquiring about
     * @return uint startDate of staking
     * @return uint current amount staked
     * @return uint current amount locked for withdrawal
     * @return uint reward debt used to calculate staking reward
     * @return uint reporter's last reported timestamp
     * @return uint total number of reports submitted by reporter
     * @return uint governance vote count when first staked
     * @return uint number of votes case by staker when first staked
     * @return uint whether staker is counted in totalStakers
     */
    function getStakerInfo(address _stakerAddress)
        external
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            bool
        )
    {
        StakeInfo storage _staker = stakerDetails[_stakerAddress];
        return (
            _staker.startDate,
            _staker.stakedBalance,
            _staker.lockedBalance,
            0, // reward debt
            _staker.reporterLastTimestamp,
            _staker.reportsSubmitted,
            0, // start vote count
            0, // start vote tally
            false
        );
    }

    /**
     * @dev Gets the timestamp for the value based on their index
     * @param _queryId is the queryId to look up
     * @param _index is the value index to look up
     * @return uint256 timestamp
     */
    function getTimestampbyQueryIdandIndex(bytes32 _queryId, uint256 _index)
        public
        view
        returns (uint256)
    {
        uint256 _len = timestamps[_queryId].length;
        if (_len == 0 || _len <= _index) return 0;
        return timestamps[_queryId][_index];
    }

    /**
     * @dev Returns an array of voting rounds for a given vote
     * @param _hash is the identifier hash for a vote
     * @return uint256[] memory dispute IDs of the vote rounds
     */
    function getVoteRounds(bytes32 _hash) public view returns (uint256[] memory){
        return voteRounds[_hash];
    }

    /**
     * @dev Returns the governance address of the contract
     * @return address (this address)
     */
    function governance() external view returns (address) {
        return address(this);
    }

    /**
     * @dev Returns whether a given value is disputed
     * @param _queryId unique ID of the data feed
     * @param _timestamp timestamp of the value
     * @return bool whether the value is disputed
     */
    function isInDispute(bytes32 _queryId, uint256 _timestamp)
        public
        view
        returns (bool)
    {
        return isDisputed[_queryId][_timestamp];
    }

    /**
     * @dev Returns the name of the token.
     * @return string name of the token
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Retrieves value from oracle based on queryId/timestamp
     * @param _queryId being requested
     * @param _timestamp to retrieve data/value from
     * @return bytes value for queryId/timestamp submitted
     */
    function retrieveData(bytes32 _queryId, uint256 _timestamp)
        external
        view
        returns (bytes memory)
    {
        return values[_queryId][_timestamp];
    }

    /**
     * @dev Returns the symbol of the token.
     * @return string symbol of the token
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the total supply of the token.
     * @return uint256 total supply of token
     */
    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    // Internal functions
    /**
     * @dev Internal function to approve tokens for the user
     * @param _owner The owner of the tokens
     * @param _spender The address which is allowed to spend the tokens
     * @param _amount The amount that msg.sender is allowing spender to use
     */
    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 Internal function to burn tokens for the user
     * @param _account The address whose tokens to burn
     * @param _amount The quantity of tokens to burn
     */
    function _burn(address _account, uint256 _amount) internal{
        require(_account != address(0), "ERC20: burn from the zero address");
        _balances[_account] -= _amount;
        _totalSupply -= _amount;
        emit Transfer(_account, address(0), _amount);
    }

    /**
     * @dev Internal function to create new tokens for the user
     * @param _account The address which receives minted tokens
     * @param _amount The quantity of tokens to min
     */
    function _mint(address _account, uint256 _amount) internal{
        require(_account != address(0), "ERC20: mint to the zero address");
        _totalSupply += _amount;
        _balances[_account] += _amount;
        emit Transfer(address(0), _account, _amount);
    }

    /**
     * @dev Internal function to perform token transfer
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     */
    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] -= _amount;
        _balances[_recipient] += _amount;
        emit Transfer(_sender, _recipient, _amount);
    }

    /**
     * @dev Allows this contract to transfer tokens from one user to another
     * @param _sender The address which owns the tokens
     * @param _recipient The destination address
     * @param _amount The quantity of tokens to transfer
     * @return bool Whether the transfer succeeded
     */
    function _transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal returns (bool) {
        _transfer(_sender, _recipient, _amount);
        _approve(
            _sender,
            msg.sender,
            _allowances[_sender][address(this)] - _amount
        );
        return true;
    }
}

Contract ABI

[{"inputs":[],"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":false,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_value","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_reporter","type":"address"}],"name":"NewReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"NewStaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeWithdrawRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staker","type":"address"}],"name":"StakeWithdrawn","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"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"beginDispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"faucet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getDataBefore","outputs":[{"internalType":"bool","name":"_ifRetrieve","type":"bool"},{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_timestampRetrieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getIndexForDataBefore","outputs":[{"internalType":"bool","name":"_found","type":"bool"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getNewValueCountbyQueryId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getReporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stakerAddress","type":"address"}],"name":"getStakerInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getTimestampbyQueryIdandIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getVoteRounds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isDisputed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"isInDispute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"reporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestStakingWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"retrieveData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"submitValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBasedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"timestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"tips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tipsInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"voteRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040805180820190915260108082526f15195b1b1bdc941b185e59dc9bdd5b9960821b60209092019182526200004b91600e916200009f565b50604080518082019091526004808252630545242560e41b60209092019182526200007991600f916200009f565b506010805460ff19166012179055600c80546001600160a01b0319163017905562000182565b828054620000ad9062000145565b90600052602060002090601f016020900481019282620000d157600085556200011c565b82601f10620000ec57805160ff19168380011785556200011c565b828001600101855582156200011c579182015b828111156200011c578251825591602001919060010190620000ff565b506200012a9291506200012e565b5090565b5b808211156200012a57600081556001016200012f565b600181811c908216806200015a57607f821691505b602082108114156200017c57634e487b7160e01b600052602260045260246000fd5b50919050565b611d6380620001926000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063733bdef011610130578063c5958af9116100b8578063d9c51cd41161007c578063d9c51cd4146105c7578063dd62ed3e146105da578063e07c548614610613578063f25133f314610647578063fc0c546a1461065a57610232565b8063c5958af914610572578063c638407114610585578063c979fe9f1461058e578063cb82cc8f146105a1578063ce5e11bf146105b457610232565b806396426d97116100ff57806396426d9714610513578063a792765f14610522578063a9059cbb14610544578063b86d1d6314610557578063bed9d8611461056a57610232565b8063733bdef01461044357806377b03e0d146104d85780638929f4c6146104f857806395d89b411461050b57610232565b8063313ce567116101be57806360c7dc471161018257806360c7dc47146103d557806364473df2146103de57806369d43bd31461040957806370a0823114610412578063722580b61461043b57610232565b8063313ce5671461035b57806344e87f91146103705780635aa6e6751461039c5780635eaa9ced146103a2578063602bf227146103b557610232565b80631f379acc116102055780631f379acc1461029d578063217053c0146102b257806323b872dd146102fe578063248638e514610311578063294490851461033157610232565b806306fdde0314610237578063091b50ff14610255578063095ea7b31461026857806318160ddd1461028b575b600080fd5b61023f61066d565b60405161024c9190611c32565b60405180910390f35b61023f610263366004611ada565b6106ff565b61027b6102763660046119f4565b6107a4565b604051901515815260200161024c565b600d545b60405190815260200161024c565b6102b06102ab366004611ada565b6107bb565b005b6102e66102c0366004611ada565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b61027b61030c3660046119b9565b610881565b61032461031f366004611a1d565b6108d3565b60405161024c9190611b56565b61034461033f366004611ada565b610936565b60408051921515835260208301919091520161024c565b60105460405160ff909116815260200161024c565b61027b61037e366004611ada565b60009182526020828152604080842092845291905290205460ff1690565b306102e6565b6102b06103b0366004611a35565b610c60565b61028f6103c3366004611a1d565b60046020526000908152604090205481565b61028f60095481565b61027b6103ec366004611ada565b600060208181529281526040808220909352908152205460ff1681565b61028f600a5481565b61028f610420366004611966565b6001600160a01b031660009081526008602052604090205490565b60095461028f565b610492610451366004611966565b6001600160a01b0316600090815260026020819052604082208054600182015492820154600383015460049093015491959394909390929190839081908190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015215156101008201526101200161024c565b61028f6104e6366004611a1d565b60009081526003602052604090205490565b6102b0610506366004611a1d565b610e9a565b61023f610f75565b61028f6706f05b59d3b2000081565b610535610530366004611ada565b610f84565b60405161024c93929190611b9a565b61027b6105523660046119f4565b611081565b6102b0610565366004611966565b61108e565b6102b06110a4565b61023f610580366004611ada565b6111b2565b61028f600b5481565b61028f61059c366004611ada565b611260565b6102b06105af366004611a1d565b611291565b61028f6105c2366004611ada565b61136f565b6102b06105d5366004611a1d565b6113dc565b61028f6105e8366004611987565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6102e6610621366004611ada565b60009182526001602090815260408084209284529190529020546001600160a01b031690565b61028f610655366004611ada565b6113f0565b600c546102e6906001600160a01b031681565b6060600e805461067c90611cab565b80601f01602080910402602001604051908101604052809291908181526020018280546106a890611cab565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b60056020908152600092835260408084209091529082529020805461072390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90611cab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60006107b133848461140c565b5060015b92915050565b60408051602080820180845260008084528681526005835284812086825290925292902090516107eb92906117bb565b506000828152602081815260408083208484529091528120805460ff19166001179055600b80549161081c83611ce6565b9190505550600660008383604051602001610841929190918252602082015260400190565b60408051601f19818403018152918152815160209283012083528282019390935291016000908120600b5481546001810183559183529290912001555050565b600061088e848484611531565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546108c99186916108c4908690611c7d565b61140c565b5060019392505050565b60008181526006602090815260409182902080548351818402810184019094528084526060939283018282801561092957602002820191906000526020600020905b815481526020019060010190808311610915575b505050505090505b919050565b60008281526003602052604081205481908015610c50576000808061095c600185611c7d565b9050600061096a898461136f565b905087811061098457600080965096505050505050610c59565b61098e898361136f565b905087811015610a2e575b60008981526020818152604080832084845290915290205460ff1680156109c05750600082115b156109e357816109cf81611c94565b9250506109dc898361136f565b9050610999565b81158015610a08575060008981526020818152604080832084845290915290205460ff165b15610a1e57600080965096505050505050610c59565b50600195509350610c5992505050565b826002610a3b8285611c7d565b610a459190611c5d565b610a50906001611c45565b610a5a9190611c45565b9350610a66898561136f565b905087811015610b66576000610a818a6105c2876001611c45565b9050888110610b535760008a81526020818152604080832085845290915290205460ff16610abb5760018597509750505050505050610c59565b60008a81526020818152604080832085845290915290205460ff168015610ae25750600085115b15610b055784610af181611c94565b955050610afe8a8661136f565b9150610abb565b84158015610b2a575060008a81526020818152604080832085845290915290205460ff165b15610b415760008097509750505050505050610c59565b60018597509750505050505050610c59565b610b5e856001611c45565b935050610c4b565b6000610b778a6105c2600188611c7d565b905088811015610c3c5760008a81526020818152604080832084845290915290205460ff16610bbb576001610bac8187611c7d565b97509750505050505050610c59565b84610bc581611c94565b9550505b60008a81526020818152604080832084845290915290205460ff168015610bf05750600085115b15610c135784610bff81611c94565b955050610c0c8a8661136f565b9050610bc9565b84158015610b2a575060008a81526020818152604080832084845290915290205460ff16610b2a565b610c47600186611c7d565b9250505b610a2e565b60008092509250505b9250929050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708484604051610c91929190611b46565b60405180910390201415610cec5760405162461bcd60e51b815260206004820152601760248201527f76616c7565206d757374206265207375626d697474656400000000000000000060448201526064015b60405180910390fd5b600085815260036020526040902054821480610d06575081155b610d525760405162461bcd60e51b815260206004820181905260248201527f6e6f6e6365206d757374206d617463682074696d657374616d7020696e6465786044820152606401610ce3565b80516020820120851480610d67575060648511155b610db35760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f6620627974657320646174610000006044820152606401610ce3565b60008581526005602090815260408083204284529091529020610dd790858561183f565b5060008581526003602081815260408084208054600181810183559186528386204291018190558a86529083528185208186528352818520805473ffffffffffffffffffffffffffffffffffffffff19163390811790915585526002909252832091820155600401805491610e4b83611ce6565b91905055507f48e9e2c732ba278de6ac88a3a57a5c5ba13d3d8370e709b3b98333a57876ca9585428686868633604051610e8b9796959493929190611bc5565b60405180910390a15050505050565b3360009081526002602052604090206001810154821115610efd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610ce3565b428155600281018054839190600090610f17908490611c45565b9250508190555081816001016000828254610f329190611c7d565b909155505060408051338152602081018490527f3d8d9df4bd0172df32e557fa48e96435cd7f2cac06aaffacfaee608e6f7898ef91015b60405180910390a15050565b6060600f805461067c90611cab565b600060606000806000610f978787610936565b9150915081610fc1576000604051806020016040528060008152506000945094509450505061107a565b610fcb878261136f565b60008881526005602090815260408083208484529091529020805491945090610ff390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cab565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505093506001945050505b9250925092565b60006107b1338484611531565b6110a181683635c9adc5dea00000611698565b50565b336000908152600260205260409020805462093a80906110c49042611c7d565b10156111075760405162461bcd60e51b8152602060048201526012602482015271372064617973206469646e2774207061737360701b6044820152606401610ce3565b60008160020154116111665760405162461bcd60e51b815260206004820152602260248201527f7265706f72746572206e6f74206c6f636b656420666f72207769746864726177604482015261185b60f21b6064820152608401610ce3565b61117530338360020154611531565b600060028201556040513381527f4a7934670bd8304e7da22378be1368f7c4fef17c5aee81804beda8638fe428ec9060200160405180910390a150565b600082815260056020908152604080832084845290915290208054606091906111da90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611cab565b80156112535780601f1061122857610100808354040283529160200191611253565b820191906000526020600020905b81548152906001019060200180831161123657829003601f168201915b5050505050905092915050565b6006602052816000526040600020818154811061127c57600080fd5b90600052602060002001600091509150505481565b336000908152600260208190526040909120908101541561130657818160020154106112d657818160020160008282546112cb9190611c7d565b909155506113019050565b6112f033308360020154856112eb9190611c7d565b611777565b6112f957600080fd5b600060028201555b61131a565b611311333084611777565b61131a57600080fd5b428155600181018054839190600090611334908490611c45565b909155505060408051338152602081018490527fa96c2cce65119a2170d1711a6e82f18f2006448828483ba7545e5954765436479101610f69565b60008281526003602052604081205480158061138b5750828111155b1561139a5760009150506107b5565b60008481526003602052604090208054849081106113c857634e487b7160e01b600052603260045260246000fd5b906000526020600020015491505092915050565b6113e7333083611777565b6110a157600080fd5b6003602052816000526040600020818154811061127c57600080fd5b6001600160a01b03831661146e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce3565b6001600160a01b0382166114cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ce3565b6001600160a01b0382166115f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ce3565b6001600160a01b0383166000908152600860205260408120805483929061161f908490611c7d565b90915550506001600160a01b0382166000908152600860205260408120805483929061164c908490611c45565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161152491815260200190565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ce3565b80600d60008282546117009190611c45565b90915550506001600160a01b0382166000908152600860205260408120805483929061172d908490611c45565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000611784848484611531565b6001600160a01b03841660009081526007602090815260408083203084529091529020546108c990859033906108c4908690611c7d565b8280546117c790611cab565b90600052602060002090601f0160209004810192826117e9576000855561182f565b82601f1061180257805160ff191683800117855561182f565b8280016001018555821561182f579182015b8281111561182f578251825591602001919060010190611814565b5061183b9291506118b3565b5090565b82805461184b90611cab565b90600052602060002090601f01602090048101928261186d576000855561182f565b82601f106118865782800160ff1982351617855561182f565b8280016001018555821561182f579182015b8281111561182f578235825591602001919060010190611898565b5b8082111561183b57600081556001016118b4565b80356001600160a01b038116811461093157600080fd5b600082601f8301126118ef578081fd5b813567ffffffffffffffff8082111561190a5761190a611d17565b604051601f8301601f19908116603f0116810190828211818310171561193257611932611d17565b8160405283815286602085880101111561194a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611977578081fd5b611980826118c8565b9392505050565b60008060408385031215611999578081fd5b6119a2836118c8565b91506119b0602084016118c8565b90509250929050565b6000806000606084860312156119cd578081fd5b6119d6846118c8565b92506119e4602085016118c8565b9150604084013590509250925092565b60008060408385031215611a06578182fd5b611a0f836118c8565b946020939093013593505050565b600060208284031215611a2e578081fd5b5035919050565b600080600080600060808688031215611a4c578081fd5b85359450602086013567ffffffffffffffff80821115611a6a578283fd5b818801915088601f830112611a7d578283fd5b813581811115611a8b578384fd5b896020828501011115611a9c578384fd5b60208301965080955050604088013593506060880135915080821115611ac0578283fd5b50611acd888289016118df565b9150509295509295909350565b60008060408385031215611aec578182fd5b50508035926020909101359150565b60008151808452815b81811015611b2057602081850181015186830182015201611b04565b81811115611b315782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b81811015611b8e57835183529284019291840191600101611b72565b50909695505050505050565b6000841515825260606020830152611bb56060830185611afb565b9050826040830152949350505050565b600088825287602083015260c060408301528560c0830152858760e08401378060e08784010152601f19601f870116820185606084015260e0838203016080840152611c1460e0820186611afb565b9150506001600160a01b03831660a083015298975050505050505050565b6000602082526119806020830184611afb565b60008219821115611c5857611c58611d01565b500190565b600082611c7857634e487b7160e01b81526012600452602481fd5b500490565b600082821015611c8f57611c8f611d01565b500390565b600081611ca357611ca3611d01565b506000190190565b600181811c90821680611cbf57607f821691505b60208210811415611ce057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cfa57611cfa611d01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b418264736f6c63430008030033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063733bdef011610130578063c5958af9116100b8578063d9c51cd41161007c578063d9c51cd4146105c7578063dd62ed3e146105da578063e07c548614610613578063f25133f314610647578063fc0c546a1461065a57610232565b8063c5958af914610572578063c638407114610585578063c979fe9f1461058e578063cb82cc8f146105a1578063ce5e11bf146105b457610232565b806396426d97116100ff57806396426d9714610513578063a792765f14610522578063a9059cbb14610544578063b86d1d6314610557578063bed9d8611461056a57610232565b8063733bdef01461044357806377b03e0d146104d85780638929f4c6146104f857806395d89b411461050b57610232565b8063313ce567116101be57806360c7dc471161018257806360c7dc47146103d557806364473df2146103de57806369d43bd31461040957806370a0823114610412578063722580b61461043b57610232565b8063313ce5671461035b57806344e87f91146103705780635aa6e6751461039c5780635eaa9ced146103a2578063602bf227146103b557610232565b80631f379acc116102055780631f379acc1461029d578063217053c0146102b257806323b872dd146102fe578063248638e514610311578063294490851461033157610232565b806306fdde0314610237578063091b50ff14610255578063095ea7b31461026857806318160ddd1461028b575b600080fd5b61023f61066d565b60405161024c9190611c32565b60405180910390f35b61023f610263366004611ada565b6106ff565b61027b6102763660046119f4565b6107a4565b604051901515815260200161024c565b600d545b60405190815260200161024c565b6102b06102ab366004611ada565b6107bb565b005b6102e66102c0366004611ada565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b03909116815260200161024c565b61027b61030c3660046119b9565b610881565b61032461031f366004611a1d565b6108d3565b60405161024c9190611b56565b61034461033f366004611ada565b610936565b60408051921515835260208301919091520161024c565b60105460405160ff909116815260200161024c565b61027b61037e366004611ada565b60009182526020828152604080842092845291905290205460ff1690565b306102e6565b6102b06103b0366004611a35565b610c60565b61028f6103c3366004611a1d565b60046020526000908152604090205481565b61028f60095481565b61027b6103ec366004611ada565b600060208181529281526040808220909352908152205460ff1681565b61028f600a5481565b61028f610420366004611966565b6001600160a01b031660009081526008602052604090205490565b60095461028f565b610492610451366004611966565b6001600160a01b0316600090815260026020819052604082208054600182015492820154600383015460049093015491959394909390929190839081908190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015215156101008201526101200161024c565b61028f6104e6366004611a1d565b60009081526003602052604090205490565b6102b0610506366004611a1d565b610e9a565b61023f610f75565b61028f6706f05b59d3b2000081565b610535610530366004611ada565b610f84565b60405161024c93929190611b9a565b61027b6105523660046119f4565b611081565b6102b0610565366004611966565b61108e565b6102b06110a4565b61023f610580366004611ada565b6111b2565b61028f600b5481565b61028f61059c366004611ada565b611260565b6102b06105af366004611a1d565b611291565b61028f6105c2366004611ada565b61136f565b6102b06105d5366004611a1d565b6113dc565b61028f6105e8366004611987565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6102e6610621366004611ada565b60009182526001602090815260408084209284529190529020546001600160a01b031690565b61028f610655366004611ada565b6113f0565b600c546102e6906001600160a01b031681565b6060600e805461067c90611cab565b80601f01602080910402602001604051908101604052809291908181526020018280546106a890611cab565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b60056020908152600092835260408084209091529082529020805461072390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f90611cab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b505050505081565b60006107b133848461140c565b5060015b92915050565b60408051602080820180845260008084528681526005835284812086825290925292902090516107eb92906117bb565b506000828152602081815260408083208484529091528120805460ff19166001179055600b80549161081c83611ce6565b9190505550600660008383604051602001610841929190918252602082015260400190565b60408051601f19818403018152918152815160209283012083528282019390935291016000908120600b5481546001810183559183529290912001555050565b600061088e848484611531565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546108c99186916108c4908690611c7d565b61140c565b5060019392505050565b60008181526006602090815260409182902080548351818402810184019094528084526060939283018282801561092957602002820191906000526020600020905b815481526020019060010190808311610915575b505050505090505b919050565b60008281526003602052604081205481908015610c50576000808061095c600185611c7d565b9050600061096a898461136f565b905087811061098457600080965096505050505050610c59565b61098e898361136f565b905087811015610a2e575b60008981526020818152604080832084845290915290205460ff1680156109c05750600082115b156109e357816109cf81611c94565b9250506109dc898361136f565b9050610999565b81158015610a08575060008981526020818152604080832084845290915290205460ff165b15610a1e57600080965096505050505050610c59565b50600195509350610c5992505050565b826002610a3b8285611c7d565b610a459190611c5d565b610a50906001611c45565b610a5a9190611c45565b9350610a66898561136f565b905087811015610b66576000610a818a6105c2876001611c45565b9050888110610b535760008a81526020818152604080832085845290915290205460ff16610abb5760018597509750505050505050610c59565b60008a81526020818152604080832085845290915290205460ff168015610ae25750600085115b15610b055784610af181611c94565b955050610afe8a8661136f565b9150610abb565b84158015610b2a575060008a81526020818152604080832085845290915290205460ff165b15610b415760008097509750505050505050610c59565b60018597509750505050505050610c59565b610b5e856001611c45565b935050610c4b565b6000610b778a6105c2600188611c7d565b905088811015610c3c5760008a81526020818152604080832084845290915290205460ff16610bbb576001610bac8187611c7d565b97509750505050505050610c59565b84610bc581611c94565b9550505b60008a81526020818152604080832084845290915290205460ff168015610bf05750600085115b15610c135784610bff81611c94565b955050610c0c8a8661136f565b9050610bc9565b84158015610b2a575060008a81526020818152604080832084845290915290205460ff16610b2a565b610c47600186611c7d565b9250505b610a2e565b60008092509250505b9250929050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708484604051610c91929190611b46565b60405180910390201415610cec5760405162461bcd60e51b815260206004820152601760248201527f76616c7565206d757374206265207375626d697474656400000000000000000060448201526064015b60405180910390fd5b600085815260036020526040902054821480610d06575081155b610d525760405162461bcd60e51b815260206004820181905260248201527f6e6f6e6365206d757374206d617463682074696d657374616d7020696e6465786044820152606401610ce3565b80516020820120851480610d67575060648511155b610db35760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f6620627974657320646174610000006044820152606401610ce3565b60008581526005602090815260408083204284529091529020610dd790858561183f565b5060008581526003602081815260408084208054600181810183559186528386204291018190558a86529083528185208186528352818520805473ffffffffffffffffffffffffffffffffffffffff19163390811790915585526002909252832091820155600401805491610e4b83611ce6565b91905055507f48e9e2c732ba278de6ac88a3a57a5c5ba13d3d8370e709b3b98333a57876ca9585428686868633604051610e8b9796959493929190611bc5565b60405180910390a15050505050565b3360009081526002602052604090206001810154821115610efd5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74207374616b65642062616c616e636500000000006044820152606401610ce3565b428155600281018054839190600090610f17908490611c45565b9250508190555081816001016000828254610f329190611c7d565b909155505060408051338152602081018490527f3d8d9df4bd0172df32e557fa48e96435cd7f2cac06aaffacfaee608e6f7898ef91015b60405180910390a15050565b6060600f805461067c90611cab565b600060606000806000610f978787610936565b9150915081610fc1576000604051806020016040528060008152506000945094509450505061107a565b610fcb878261136f565b60008881526005602090815260408083208484529091529020805491945090610ff390611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cab565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505093506001945050505b9250925092565b60006107b1338484611531565b6110a181683635c9adc5dea00000611698565b50565b336000908152600260205260409020805462093a80906110c49042611c7d565b10156111075760405162461bcd60e51b8152602060048201526012602482015271372064617973206469646e2774207061737360701b6044820152606401610ce3565b60008160020154116111665760405162461bcd60e51b815260206004820152602260248201527f7265706f72746572206e6f74206c6f636b656420666f72207769746864726177604482015261185b60f21b6064820152608401610ce3565b61117530338360020154611531565b600060028201556040513381527f4a7934670bd8304e7da22378be1368f7c4fef17c5aee81804beda8638fe428ec9060200160405180910390a150565b600082815260056020908152604080832084845290915290208054606091906111da90611cab565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611cab565b80156112535780601f1061122857610100808354040283529160200191611253565b820191906000526020600020905b81548152906001019060200180831161123657829003601f168201915b5050505050905092915050565b6006602052816000526040600020818154811061127c57600080fd5b90600052602060002001600091509150505481565b336000908152600260208190526040909120908101541561130657818160020154106112d657818160020160008282546112cb9190611c7d565b909155506113019050565b6112f033308360020154856112eb9190611c7d565b611777565b6112f957600080fd5b600060028201555b61131a565b611311333084611777565b61131a57600080fd5b428155600181018054839190600090611334908490611c45565b909155505060408051338152602081018490527fa96c2cce65119a2170d1711a6e82f18f2006448828483ba7545e5954765436479101610f69565b60008281526003602052604081205480158061138b5750828111155b1561139a5760009150506107b5565b60008481526003602052604090208054849081106113c857634e487b7160e01b600052603260045260246000fd5b906000526020600020015491505092915050565b6113e7333083611777565b6110a157600080fd5b6003602052816000526040600020818154811061127c57600080fd5b6001600160a01b03831661146e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce3565b6001600160a01b0382166114cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce3565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166115955760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ce3565b6001600160a01b0382166115f75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ce3565b6001600160a01b0383166000908152600860205260408120805483929061161f908490611c7d565b90915550506001600160a01b0382166000908152600860205260408120805483929061164c908490611c45565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161152491815260200190565b6001600160a01b0382166116ee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ce3565b80600d60008282546117009190611c45565b90915550506001600160a01b0382166000908152600860205260408120805483929061172d908490611c45565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000611784848484611531565b6001600160a01b03841660009081526007602090815260408083203084529091529020546108c990859033906108c4908690611c7d565b8280546117c790611cab565b90600052602060002090601f0160209004810192826117e9576000855561182f565b82601f1061180257805160ff191683800117855561182f565b8280016001018555821561182f579182015b8281111561182f578251825591602001919060010190611814565b5061183b9291506118b3565b5090565b82805461184b90611cab565b90600052602060002090601f01602090048101928261186d576000855561182f565b82601f106118865782800160ff1982351617855561182f565b8280016001018555821561182f579182015b8281111561182f578235825591602001919060010190611898565b5b8082111561183b57600081556001016118b4565b80356001600160a01b038116811461093157600080fd5b600082601f8301126118ef578081fd5b813567ffffffffffffffff8082111561190a5761190a611d17565b604051601f8301601f19908116603f0116810190828211818310171561193257611932611d17565b8160405283815286602085880101111561194a578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611977578081fd5b611980826118c8565b9392505050565b60008060408385031215611999578081fd5b6119a2836118c8565b91506119b0602084016118c8565b90509250929050565b6000806000606084860312156119cd578081fd5b6119d6846118c8565b92506119e4602085016118c8565b9150604084013590509250925092565b60008060408385031215611a06578182fd5b611a0f836118c8565b946020939093013593505050565b600060208284031215611a2e578081fd5b5035919050565b600080600080600060808688031215611a4c578081fd5b85359450602086013567ffffffffffffffff80821115611a6a578283fd5b818801915088601f830112611a7d578283fd5b813581811115611a8b578384fd5b896020828501011115611a9c578384fd5b60208301965080955050604088013593506060880135915080821115611ac0578283fd5b50611acd888289016118df565b9150509295509295909350565b60008060408385031215611aec578182fd5b50508035926020909101359150565b60008151808452815b81811015611b2057602081850181015186830182015201611b04565b81811115611b315782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b81811015611b8e57835183529284019291840191600101611b72565b50909695505050505050565b6000841515825260606020830152611bb56060830185611afb565b9050826040830152949350505050565b600088825287602083015260c060408301528560c0830152858760e08401378060e08784010152601f19601f870116820185606084015260e0838203016080840152611c1460e0820186611afb565b9150506001600160a01b03831660a083015298975050505050505050565b6000602082526119806020830184611afb565b60008219821115611c5857611c58611d01565b500190565b600082611c7857634e487b7160e01b81526012600452602481fd5b500490565b600082821015611c8f57611c8f611d01565b500390565b600081611ca357611ca3611d01565b506000190190565b600181811c90821680611cbf57607f821691505b60208210811415611ce057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cfa57611cfa611d01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b418264736f6c63430008030033

Deployed Bytecode Sourcemap

60:23400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19529:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1121:59;;;;;;:::i;:::-;;:::i;3122:155::-;;;;;;:::i;:::-;;:::i;:::-;;;6038:14:1;;6031:22;6013:41;;6001:2;5986:18;3122:155:0;5968:92:1;20373:93:0;20446:12;;20373:93;;;12343:25:1;;;12331:2;12316:18;20373:93:0;12298:76:1;3472:312:0;;;;;;:::i;:::-;;:::i;:::-;;775:74;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;775:74:0;;;;;;-1:-1:-1;;;;;4864:55:1;;;4846:74;;4834:2;4819:18;775:74:0;4801:125:1;7779:346:0;;;;;;:::i;:::-;;:::i;18673:119::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11115:4380::-;;;;;;:::i;:::-;;:::i;:::-;;;;6632:14:1;;6625:22;6607:41;;6679:2;6664:18;;6657:34;;;;6580:18;11115:4380:0;6562:135:1;9557:85:0;9625:9;;9557:85;;9625:9;;;;13287:36:1;;13275:2;13260:18;9557:85:0;13242:87:1;19242:176:0;;;;;;:::i;:::-;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;;19242:176;18917:93;18997:4;18917:93;;6021:1028;;;;;;:::i;:::-;;:::i;1015:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1465:26;;;;;;674:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1623:29;;;;;;9259:114;;;;;;:::i;:::-;-1:-1:-1;;;;;9346:19:0;9319:7;9346:19;;;:9;:19;;;;;;;9259:114;16438:95;16514:11;;16438:95;;17218:723;;;;;;:::i;:::-;-1:-1:-1;;;;;17565:29:0;17329:7;17565:29;;;:13;:29;;;;;;;17627:17;;17659:21;;;;17695;;;;17762:29;;;;17806:24;;;;;17627:17;;17659:21;;17695;;17329:7;;17762:29;17806:24;17329:7;;;;;;17218:723;;;;;12744:25:1;;;12800:2;12785:18;;12778:34;;;;12828:18;;;12821:34;;;;12886:2;12871:18;;12864:34;;;;12929:3;12914:19;;12907:35;;;;12973:3;12958:19;;12951:35;13017:3;13002:19;;12995:35;13061:3;13046:19;;13039:35;13118:14;13111:22;13105:3;13090:19;;13083:51;12731:3;12716:19;17218:723:0;12698:442:1;15723:168:0;;;;;;:::i;:::-;15824:7;15856:20;;;:10;:20;;;;;:27;;15723:168;5173:441;;;;;;:::i;:::-;;:::i;20160:89::-;;;:::i;1498:46::-;;1540:4;1498:46;;10061:607;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;7303:183::-;;;;;;:::i;:::-;;:::i;4928:83::-;;;;;;:::i;:::-;;:::i;8193:469::-;;;:::i;19862:183::-;;;;;;:::i;:::-;;:::i;1697:24::-;;;;;;1219:47;;;;;;:::i;:::-;;:::i;3906:868::-;;;;;;:::i;:::-;;:::i;18170:294::-;;;;;;:::i;:::-;;:::i;2668:130::-;;;;;;:::i;:::-;;:::i;8962:139::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9064:19:0;;;9038:7;9064:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;8962:139;16135:201;;;;;;:::i;:::-;16255:7;16287:29;;;:19;:29;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;16287:41:0;;16135:201;961:47;;;;;;:::i;:::-;;:::i;1728:20::-;;;;;-1:-1:-1;;;;;1728:20:0;;;19529:85;19568:13;19601:5;19594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19529:85;:::o;1121:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3122:155::-;3192:4;3208:39;3217:10;3229:8;3239:7;3208:8;:39::i;:::-;-1:-1:-1;3265:4:0;3122:155;;;;;:::o;3472:312::-;3583:9;;;;;;;;;;-1:-1:-1;3583:9:0;;;3552:16;;;:6;:16;;;;;:28;;;;;;;;;:40;;;;3583:9;3552:40;:::i;:::-;-1:-1:-1;3603:10:0;:20;;;;;;;;;;;:32;;;;;;;;:39;;-1:-1:-1;;3603:39:0;3638:4;3603:39;;;3653:9;:11;;;;;;:::i;:::-;;;;;;3675:10;:61;3713:8;3723:10;3696:38;;;;;;;;4327:19:1;;;4371:2;4362:12;;4355:28;4408:2;4399:12;;4317:100;3696:38:0;;;;-1:-1:-1;;3696:38:0;;;;;;;;;3686:49;;3696:38;3686:49;;;;3675:61;;;;;;;;;;;-1:-1:-1;3675:61:0;;;3756:9;;3675:101;;;;;;;;;;;;;;;;-1:-1:-1;;3472:312:0:o;7779:346::-;7905:4;7922:39;7932:7;7941:10;7953:7;7922:9;:39::i;:::-;-1:-1:-1;;;;;8042:20:0;;;;;;:11;:20;;;;;;;;8017:10;8042:32;;;;;;;;;7972:123;;7995:7;;8042:42;;8077:7;;8042:42;:::i;:::-;7972:8;:123::i;:::-;-1:-1:-1;8113:4:0;7779:346;;;;;:::o;18673:119::-;18767:17;;;;:10;:17;;;;;;;;;18760:24;;;;;;;;;;;;;;;;;18732:16;;18760:24;;;18767:17;18760:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18673:119;;;;:::o;11115:4380::-;11232:11;15856:20;;;:10;:20;;;;;:27;11232:11;;11344:10;;11340:4120;;11371:15;;;11449:10;11458:1;11449:6;:10;:::i;:::-;11434:25;;11474:13;11576:47;11606:8;11616:6;11576:29;:47::i;:::-;11568:55;;11651:10;11642:5;:19;11638:42;;11671:5;11678:1;11663:17;;;;;;;;;;;11638:42;11703:45;11733:8;11743:4;11703:29;:45::i;:::-;11695:53;;11775:10;11767:5;:18;11763:395;;;11806:174;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;11813:40;;;;;11852:1;11845:4;:8;11813:40;11806:174;;;11878:6;;;;:::i;:::-;;;;11915:45;11945:8;11955:4;11915:29;:45::i;:::-;11907:53;;11806:174;;;12002:9;;:41;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;12015:28;11998:107;;;12076:5;12083:1;12068:17;;;;;;;;;;;11998:107;-1:-1:-1;12131:4:0;;-1:-1:-1;12137:4:0;-1:-1:-1;12123:19:0;;-1:-1:-1;;;12123:19:0;11763:395;12316:6;12308:1;12291:13;12316:6;12291:4;:13;:::i;:::-;12290:19;;;;:::i;:::-;:23;;12312:1;12290:23;:::i;:::-;:32;;;;:::i;:::-;12280:42;;12349:48;12379:8;12389:7;12349:29;:48::i;:::-;12341:56;;12428:10;12420:5;:18;12416:3018;;;12511:17;12531:125;12587:8;12622:11;:7;12632:1;12622:11;:::i;12531:125::-;12511:145;;12696:10;12683:9;:23;12679:1195;;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;12735:972;;12858:4;12864:7;12850:22;;;;;;;;;;;;12735:972;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;13063:43;;;;;13105:1;13095:7;:11;13063:43;13022:392;;;13173:9;;;;:::i;:::-;;;;13225:157;13293:8;13340:7;13225:29;:157::i;:::-;13217:165;;13022:392;;;13448:12;;:44;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;13464:28;13444:134;;;13537:5;13544:1;13529:17;;;;;;;;;;;;13444:134;13665:4;13671:7;13657:22;;;;;;;;;;;;12679:1195;13839:11;:7;13849:1;13839:11;:::i;:::-;13830:20;;12416:3018;;;;13922:17;13942:125;13998:8;14033:11;14043:1;14033:7;:11;:::i;13942:125::-;13922:145;;14106:10;14094:9;:22;14090:1325;;;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14145:1104;;14276:4;14282:11;14276:4;14282:7;:11;:::i;:::-;14268:26;;;;;;;;;;;;14145:1104;14444:9;;;;:::i;:::-;;;;14484:400;19349:4;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14525:47;;;;;14571:1;14561:7;:11;14525:47;14484:400;;;14639:9;;;;:::i;:::-;;;;14695:157;14763:8;14810:7;14695:29;:157::i;:::-;14683:169;;14484:400;;;14952:12;;:48;;;;-1:-1:-1;19349:4:0;19378:20;;;;;;;;;;;:32;;;;;;;;;;;14968;19242:176;14090:1325;15380:11;15390:1;15380:7;:11;:::i;:::-;15373:18;;12416:3018;;12248:3201;;11340:4120;15478:5;15485:1;15470:17;;;;;11115:4380;;;;;;:::o;6021:1028::-;6216:13;6205:6;;6195:17;;;;;;;:::i;:::-;;;;;;;;:34;;6187:70;;;;-1:-1:-1;;;6187:70:0;;9756:2:1;6187:70:0;;;9738:21:1;9795:2;9775:18;;;9768:30;9834:25;9814:18;;;9807:53;9877:18;;6187:70:0;;;;;;;;;6300:20;;;;:10;:20;;;;;:27;6290:37;;;:52;;-1:-1:-1;6331:11:0;;6290:52;6268:134;;;;-1:-1:-1;;;6268:134:0;;10108:2:1;6268:134:0;;;10090:21:1;;;10127:18;;;10120:30;10186:34;10166:18;;;10159:62;10238:18;;6268:134:0;10080:182:1;6268:134:0;6447:21;;;;;;6435:33;;;:61;;-1:-1:-1;6493:3:0;6472:24;;;6435:61;6413:140;;;;-1:-1:-1;;;6413:140:0;;9051:2:1;6413:140:0;;;9033:21:1;9090:2;9070:18;;;9063:30;9129:31;9109:18;;;9102:59;9178:18;;6413:140:0;9023:179:1;6413:140:0;6564:16;;;;:6;:16;;;;;;;;6581:15;6564:33;;;;;;;:42;;6600:6;;6564:42;:::i;:::-;-1:-1:-1;6617:20:0;;;;:10;:20;;;;;;;;:42;;;;;;;;;;;;;;6643:15;6617:42;;;;;6670:29;;;;;;;;;:46;;;;;;;;:59;;-1:-1:-1;;6670:59:0;6719:10;6670:59;;;;;;6740:25;;:13;:25;;;;;:47;;;:65;6816:42;;:44;;;;;;:::i;:::-;;;;;;6876:165;6900:8;6923:15;6953:6;;6974;6995:10;7020;6876:165;;;;;;;;;;;;:::i;:::-;;;;;;;;6021:1028;;;;;:::o;5173:441::-;5284:10;5242:25;5270;;;:13;:25;;;;;5328:21;;;;:32;-1:-1:-1;5328:32:0;5306:109;;;;-1:-1:-1;;;5306:109:0;;11683:2:1;5306:109:0;;;11665:21:1;11722:2;11702:18;;;11695:30;11761:29;11741:18;;;11734:57;11808:18;;5306:109:0;11655:177:1;5306:109:0;5446:15;5426:35;;5472:21;;;:32;;5497:7;;5472:21;5426:17;;5472:32;;5497:7;;5472:32;:::i;:::-;;;;;;;;5540:7;5515;:21;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;5563:43:0;;;5586:10;5105:74:1;;5210:2;5195:18;;5188:34;;;5563:43:0;;5078:18:1;5563:43:0;;;;;;;;5173:441;;:::o;20160:89::-;20201:13;20234:7;20227:14;;;;;:::i;10061:607::-;10186:16;10217:19;10251:27;10307:11;10320:14;10338:80;10374:8;10397:10;10338:21;:80::i;:::-;10306:112;;;;10434:6;10429:41;;10450:5;10457:9;;;;;;;;;;;;10468:1;10442:28;;;;;;;;;;10429:41;10503:47;10533:8;10543:6;10503:29;:47::i;:::-;10570:16;;;;:6;:16;;;;;;;;:37;;;;;;;;10561:46;;10481:69;;-1:-1:-1;10570:37:0;10561:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:4;10618:42;;;;10061:607;;;;;;:::o;7303:183::-;7392:4;7414:42;7424:10;7436;7448:7;7414:9;:42::i;4928:83::-;4979:24;4985:5;4992:10;4979:5;:24::i;:::-;4928:83;:::o;8193:469::-;8275:10;8238:20;8261:25;;;:13;:25;;;;;8393:12;;8409:6;;8375:30;;:15;:30;:::i;:::-;:40;;8367:71;;;;-1:-1:-1;;;8367:71:0;;9409:2:1;8367:71:0;;;9391:21:1;9448:2;9428:18;;;9421:30;-1:-1:-1;;;9467:18:1;;;9460:48;9525:18;;8367:71:0;9381:168:1;8367:71:0;8476:1;8457:2;:16;;;:20;8449:67;;;;-1:-1:-1;;;8449:67:0;;10875:2:1;8449:67:0;;;10857:21:1;10914:2;10894:18;;;10887:30;10953:34;10933:18;;;10926:62;-1:-1:-1;;;11004:18:1;;;10997:32;11046:19;;8449:67:0;10847:224:1;8449:67:0;8527:54;8545:4;8552:10;8564:2;:16;;;8527:9;:54::i;:::-;8611:1;8592:16;;;:20;8628:26;;8643:10;4846:74:1;;8628:26:0;;4834:2:1;4819:18;8628:26:0;;;;;;;8193:469;:::o;19862:183::-;20009:16;;;;:6;:16;;;;;;;;:28;;;;;;;;20002:35;;19972:12;;20009:28;20002:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19862:183;;;;:::o;1219:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3906:868::-;4007:10;3965:25;3993;;;:13;:25;;;;;;;;4033:21;;;;:25;4029:558;;4104:7;4079;:21;;;:32;4075:410;;4157:7;4132;:21;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;4075:410:0;;-1:-1:-1;4075:410:0;;4235:171;4275:10;4320:4;4362:7;:21;;;4352:7;:31;;;;:::i;:::-;4235:13;:171::i;:::-;4205:220;;;;;;4468:1;4444:21;;;:25;4075:410;4029:558;;;4525:49;4539:10;4559:4;4566:7;4525:13;:49::i;:::-;4517:58;;;;;;4617:15;4597:35;;4688:21;;;:32;;4713:7;;4688:21;4597:17;;4688:32;;4713:7;;4688:32;:::i;:::-;;;;-1:-1:-1;;4736:30:0;;;4746:10;5105:74:1;;5210:2;5195:18;;5188:34;;;4736:30:0;;5078:18:1;4736:30:0;5060:168:1;18170:294:0;18291:7;18331:20;;;:10;:20;;;;;:27;18373:9;;;:27;;;18394:6;18386:4;:14;;18373:27;18369:41;;;18409:1;18402:8;;;;;18369:41;18428:20;;;;:10;:20;;;;;:28;;18449:6;;18428:28;;;;-1:-1:-1;;;18428:28:0;;;;;;;;;;;;;;;;;18421:35;;;18170:294;;;;:::o;2668:130::-;2740:49;2754:10;2774:4;2781:7;2740:13;:49::i;:::-;2732:58;;;;;961:47;;;;;;;;;;;;;;;;;;;;20777:381;-1:-1:-1;;;;;20908:20:0;;20900:69;;;;-1:-1:-1;;;20900:69:0;;11278:2:1;20900:69:0;;;11260:21:1;11317:2;11297:18;;;11290:30;11356:34;11336:18;;;11329:62;-1:-1:-1;;;11407:18:1;;;11400:34;11451:19;;20900:69:0;11250:226:1;20900:69:0;-1:-1:-1;;;;;20988:22:0;;20980:69;;;;-1:-1:-1;;;20980:69:0;;8648:2:1;20980:69:0;;;8630:21:1;8687:2;8667:18;;;8660:30;8726:34;8706:18;;;8699:62;-1:-1:-1;;;8777:18:1;;;8770:32;8819:19;;20980:69:0;8620:224:1;20980:69:0;-1:-1:-1;;;;;21060:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;21115:35;;12343:25:1;;;21115:35:0;;12316:18:1;21115:35:0;;;;;;;;20777:381;;;:::o;22359:425::-;-1:-1:-1;;;;;22493:21:0;;22485:71;;;;-1:-1:-1;;;22485:71:0;;10469:2:1;22485:71:0;;;10451:21:1;10508:2;10488:18;;;10481:30;10547:34;10527:18;;;10520:62;-1:-1:-1;;;10598:18:1;;;10591:35;10643:19;;22485:71:0;10441:227:1;22485:71:0;-1:-1:-1;;;;;22576:24:0;;22567:72;;;;-1:-1:-1;;;22567:72:0;;8244:2:1;22567:72:0;;;8226:21:1;8283:2;8263:18;;;8256:30;8322:34;8302:18;;;8295:62;-1:-1:-1;;;8373:18:1;;;8366:33;8416:19;;22567:72:0;8216:225:1;22567:72:0;-1:-1:-1;;;;;22650:18:0;;;;;;:9;:18;;;;;:29;;22672:7;;22650:18;:29;;22672:7;;22650:29;:::i;:::-;;;;-1:-1:-1;;;;;;;22690:21:0;;;;;;:9;:21;;;;;:32;;22715:7;;22690:21;:32;;22715:7;;22690:32;:::i;:::-;;;;;;;;22756:10;-1:-1:-1;;;;;22738:38:0;22747:7;-1:-1:-1;;;;;22738:38:0;;22768:7;22738:38;;;;12343:25:1;;12331:2;12316:18;;12298:76;21838:273:0;-1:-1:-1;;;;;21915:22:0;;21907:66;;;;-1:-1:-1;;;21907:66:0;;12039:2:1;21907:66:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:33;12097:18;;;12090:61;12168:18;;21907:66:0;12011:181:1;21907:66:0;22000:7;21984:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;22018:19:0;;;;;;:9;:19;;;;;:30;;22041:7;;22018:19;:30;;22041:7;;22018:30;:::i;:::-;;;;-1:-1:-1;;22064:39:0;;12343:25:1;;;-1:-1:-1;;;;;22064:39:0;;;22081:1;;22064:39;;12331:2:1;12316:18;22064:39:0;;;;;;;21838:273;;:::o;23105:352::-;23234:4;23251:39;23261:7;23270:10;23282:7;23251:9;:39::i;:::-;-1:-1:-1;;;;;23371:20:0;;;;;;:11;:20;;;;;;;;23400:4;23371:35;;;;;;;;23301:126;;23324:7;;23346:10;;23371:45;;23409:7;;23371:45;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;215:738;;310:3;303:4;295:6;291:17;287:27;277:2;;332:5;325;318:20;277:2;372:6;359:20;398:18;435:2;431;428:10;425:2;;;441:18;;:::i;:::-;516:2;510:9;484:2;570:13;;-1:-1:-1;;566:22:1;;;590:2;562:31;558:40;546:53;;;614:18;;;634:22;;;611:46;608:2;;;660:18;;:::i;:::-;700:10;696:2;689:22;735:2;727:6;720:18;781:3;774:4;769:2;761:6;757:15;753:26;750:35;747:2;;;802:5;795;788:20;747:2;870;863:4;855:6;851:17;844:4;836:6;832:17;819:54;893:15;;;910:4;889:26;882:41;;;;-1:-1:-1;897:6:1;267:686;-1:-1:-1;;;267:686:1:o;958:196::-;;1070:2;1058:9;1049:7;1045:23;1041:32;1038:2;;;1091:6;1083;1076:22;1038:2;1119:29;1138:9;1119:29;:::i;:::-;1109:39;1028:126;-1:-1:-1;;;1028:126:1:o;1159:270::-;;;1288:2;1276:9;1267:7;1263:23;1259:32;1256:2;;;1309:6;1301;1294:22;1256:2;1337:29;1356:9;1337:29;:::i;:::-;1327:39;;1385:38;1419:2;1408:9;1404:18;1385:38;:::i;:::-;1375:48;;1246:183;;;;;:::o;1434:338::-;;;;1580:2;1568:9;1559:7;1555:23;1551:32;1548:2;;;1601:6;1593;1586:22;1548:2;1629:29;1648:9;1629:29;:::i;:::-;1619:39;;1677:38;1711:2;1700:9;1696:18;1677:38;:::i;:::-;1667:48;;1762:2;1751:9;1747:18;1734:32;1724:42;;1538:234;;;;;:::o;1777:264::-;;;1906:2;1894:9;1885:7;1881:23;1877:32;1874:2;;;1927:6;1919;1912:22;1874:2;1955:29;1974:9;1955:29;:::i;:::-;1945:39;2031:2;2016:18;;;;2003:32;;-1:-1:-1;;;1864:177:1:o;2046:190::-;;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;2179:6;2171;2164:22;2126:2;-1:-1:-1;2207:23:1;;2116:120;-1:-1:-1;2116:120:1:o;2241:986::-;;;;;;2432:3;2420:9;2411:7;2407:23;2403:33;2400:2;;;2454:6;2446;2439:22;2400:2;2495:9;2482:23;2472:33;;2556:2;2545:9;2541:18;2528:32;2579:18;2620:2;2612:6;2609:14;2606:2;;;2641:6;2633;2626:22;2606:2;2684:6;2673:9;2669:22;2659:32;;2729:7;2722:4;2718:2;2714:13;2710:27;2700:2;;2756:6;2748;2741:22;2700:2;2801;2788:16;2827:2;2819:6;2816:14;2813:2;;;2848:6;2840;2833:22;2813:2;2898:7;2893:2;2884:6;2880:2;2876:15;2872:24;2869:37;2866:2;;;2924:6;2916;2909:22;2866:2;2960;2956;2952:11;2942:21;;2982:6;2972:16;;;3035:2;3024:9;3020:18;3007:32;2997:42;;3092:2;3081:9;3077:18;3064:32;3048:48;;3121:2;3111:8;3108:16;3105:2;;;3142:6;3134;3127:22;3105:2;;3170:51;3213:7;3202:8;3191:9;3187:24;3170:51;:::i;:::-;3160:61;;;2390:837;;;;;;;;:::o;3232:258::-;;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;-1:-1:-1;;3410:23:1;;;3480:2;3465:18;;;3452:32;;-1:-1:-1;3319:171:1:o;3690:475::-;;3769:5;3763:12;3796:6;3791:3;3784:19;3821:3;3833:162;3847:6;3844:1;3841:13;3833:162;;;3909:4;3965:13;;;3961:22;;3955:29;3937:11;;;3933:20;;3926:59;3862:12;3833:162;;;4013:6;4010:1;4007:13;4004:2;;;4079:3;4072:4;4063:6;4058:3;4054:16;4050:27;4043:40;4004:2;-1:-1:-1;4147:2:1;4126:15;-1:-1:-1;;4122:29:1;4113:39;;;;4154:4;4109:50;;3739:426;-1:-1:-1;;3739:426:1:o;4422:273::-;;4605:6;4597;4592:3;4579:33;4631:16;;4656:15;;;4631:16;4569:126;-1:-1:-1;4569:126:1:o;5233:635::-;5404:2;5456:21;;;5526:13;;5429:18;;;5548:22;;;5233:635;;5404:2;5627:15;;;;5601:2;5586:18;;;5233:635;5673:169;5687:6;5684:1;5681:13;5673:169;;;5748:13;;5736:26;;5817:15;;;;5782:12;;;;5709:1;5702:9;5673:169;;;-1:-1:-1;5859:3:1;;5384:484;-1:-1:-1;;;;;;5384:484:1:o;6065:369::-;;6276:6;6269:14;6262:22;6251:9;6244:41;6321:2;6316;6305:9;6301:18;6294:30;6341:44;6381:2;6370:9;6366:18;6358:6;6341:44;:::i;:::-;6333:52;;6421:6;6416:2;6405:9;6401:18;6394:34;6234:200;;;;;;:::o;6702:889::-;;7017:6;7006:9;6999:25;7060:6;7055:2;7044:9;7040:18;7033:34;7103:3;7098:2;7087:9;7083:18;7076:31;7144:6;7138:3;7127:9;7123:19;7116:35;7202:6;7194;7188:3;7177:9;7173:19;7160:49;7259:4;7253:3;7244:6;7233:9;7229:22;7225:32;7218:46;7323:2;7319:7;7314:2;7306:6;7302:15;7298:29;7287:9;7283:45;7364:6;7359:2;7348:9;7344:18;7337:34;7432:3;7420:9;7416:2;7412:18;7408:28;7402:3;7391:9;7387:19;7380:57;7454:38;7487:3;7483:2;7479:12;7471:6;7454:38;:::i;:::-;7446:46;;;-1:-1:-1;;;;;7533:6:1;7529:55;7523:3;7512:9;7508:19;7501:84;6989:602;;;;;;;;;;:::o;7596:217::-;;7743:2;7732:9;7725:21;7763:44;7803:2;7792:9;7788:18;7780:6;7763:44;:::i;13334:128::-;;13405:1;13401:6;13398:1;13395:13;13392:2;;;13411:18;;:::i;:::-;-1:-1:-1;13447:9:1;;13382:80::o;13467:217::-;;13533:1;13523:2;;-1:-1:-1;;;13558:31:1;;13612:4;13609:1;13602:15;13640:4;13565:1;13630:15;13523:2;-1:-1:-1;13669:9:1;;13513:171::o;13689:125::-;;13757:1;13754;13751:8;13748:2;;;13762:18;;:::i;:::-;-1:-1:-1;13799:9:1;;13738:76::o;13819:136::-;;13886:5;13876:2;;13895:18;;:::i;:::-;-1:-1:-1;;;13931:18:1;;13866:89::o;13960:380::-;14039:1;14035:12;;;;14082;;;14103:2;;14157:4;14149:6;14145:17;14135:27;;14103:2;14210;14202:6;14199:14;14179:18;14176:38;14173:2;;;14256:10;14251:3;14247:20;14244:1;14237:31;14291:4;14288:1;14281:15;14319:4;14316:1;14309:15;14173:2;;14015:325;;;:::o;14345:135::-;;-1:-1:-1;;14405:17:1;;14402:2;;;14425:18;;:::i;:::-;-1:-1:-1;14472:1:1;14461:13;;14392:88::o;14485:127::-;14546:10;14541:3;14537:20;14534:1;14527:31;14577:4;14574:1;14567:15;14601:4;14598:1;14591:15;14617:127;14678:10;14673:3;14669:20;14666:1;14659:31;14709:4;14706:1;14699:15;14733:4;14730:1;14723:15

Swarm Source

ipfs://f2233fa3c479dfac43a71b519542a8a0dc83f6b7f3788fccd8c715ebdd6b4182

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.