ETH Price: $3,603.53 (+5.34%)

Contract

0x1931073e5cfeAa2e2b8BAcFeac36fd12A996a821
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake162996332022-12-30 19:20:591045 days ago1672428059IN
0x1931073e...2A996a821
0 ETH0.0085234915.83059695
Unstake162690172022-12-26 12:46:231049 days ago1672058783IN
0x1931073e...2A996a821
0 ETH0.000291649
Unstake162239002022-12-20 5:45:231056 days ago1671515123IN
0x1931073e...2A996a821
0 ETH0.0043170313.32232908
Claim Rewards162158032022-12-19 2:38:231057 days ago1671417503IN
0x1931073e...2A996a821
0 ETH0.0002829911.05084574
Unstake162143322022-12-18 21:41:351057 days ago1671399695IN
0x1931073e...2A996a821
0 ETH0.0020928414.72558624
Unstake162143302022-12-18 21:41:111057 days ago1671399671IN
0x1931073e...2A996a821
0 ETH0.0020648412.6734104
Unstake162143292022-12-18 21:40:591057 days ago1671399659IN
0x1931073e...2A996a821
0 ETH0.0024142413.72555864
Unstake162143272022-12-18 21:40:351057 days ago1671399635IN
0x1931073e...2A996a821
0 ETH0.0026211213.87860802
Unstake162143062022-12-18 21:36:231057 days ago1671399383IN
0x1931073e...2A996a821
0 ETH0.002793413.84050955
Unstake162143042022-12-18 21:35:591057 days ago1671399359IN
0x1931073e...2A996a821
0 ETH0.0027448912.7791227
Unstake162143022022-12-18 21:35:351057 days ago1671399335IN
0x1931073e...2A996a821
0 ETH0.002642711.78556395
Unstake162143002022-12-18 21:35:111057 days ago1671399311IN
0x1931073e...2A996a821
0 ETH0.0030164612.53056308
Unstake162142982022-12-18 21:34:471057 days ago1671399287IN
0x1931073e...2A996a821
0 ETH0.0032636812.93654822
Unstake162142822022-12-18 21:31:351057 days ago1671399095IN
0x1931073e...2A996a821
0 ETH0.0047596912.17470009
Stake161669792022-12-12 6:56:111064 days ago1670828171IN
0x1931073e...2A996a821
0 ETH0.0040356415.59646497
Stake161669772022-12-12 6:55:471064 days ago1670828147IN
0x1931073e...2A996a821
0 ETH0.0035941914.58365062
Stake161669762022-12-12 6:55:351064 days ago1670828135IN
0x1931073e...2A996a821
0 ETH0.0037418415.18274192
Stake161669762022-12-12 6:55:351064 days ago1670828135IN
0x1931073e...2A996a821
0 ETH0.0035798315.18274192
Stake161669762022-12-12 6:55:351064 days ago1670828135IN
0x1931073e...2A996a821
0 ETH0.0035798315.18274192
Stake161669572022-12-12 6:51:471064 days ago1670827907IN
0x1931073e...2A996a821
0 ETH0.0035847915.20379055
Stake161669572022-12-12 6:51:471064 days ago1670827907IN
0x1931073e...2A996a821
0 ETH0.0035847915.20379055
Stake161669562022-12-12 6:51:351064 days ago1670827895IN
0x1931073e...2A996a821
0 ETH0.0037637515.27164866
Stake161668212022-12-12 6:24:351064 days ago1670826275IN
0x1931073e...2A996a821
0 ETH0.0038006114.42062385
Unstake161453452022-12-09 6:24:351067 days ago1670567075IN
0x1931073e...2A996a821
0 ETH0.0023176616.30742987
Unstake161453442022-12-09 6:24:231067 days ago1670567063IN
0x1931073e...2A996a821
0 ETH0.0025684815.96986003
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OgStake

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-10-14
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface ERC721TokenReceiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4);
}

contract OgStake is ERC721TokenReceiver {


    bool enabled;
    uint256 timeBetweenRewards;
    uint256 rewardPerToken;
    uint256 minimumStakeTime;
    uint256 startTime;
    Stake[] stakings;

    struct StakeInfo {
        bool enabled;
        uint256 timeBetweenRewards;
        uint256 rewardPerToken;
        uint256 minimumStakeTime;
    }

    struct Stake
    {
        address holder;
        uint256 tokenId;
        uint256 stakeTime;
        uint256 lastClaimTime;
        uint256 unstakeTime;
    }

    struct StakedNftInfo
    {
        uint256 tokenId;
        string uri;
        uint256 stakeTime;
        uint256 owed;
        uint256 lastClaimed;
        uint256 timeUntilNextReward;
    }

    address public owner;
    uint256 private nonce;
    mapping (address => uint256[]) private ownerStakings;
    mapping (uint256 => uint256) private indexMap;
    
    IERC721Metadata private _nftContract;
    IERC20 private _rewardToken;

    modifier onlyOwner() {
        require(msg.sender == owner, "can only be called by the contract owner");
        _;
    }

    modifier whenEnabled() {
        require(enabled || msg.sender == owner, "staking not enabled");
        _;
    }

    constructor() {
        owner = msg.sender;

        if (block.chainid == 1) {
            _nftContract = IERC721Metadata(0x5b9D7Ee3Ba252c41a07C2D6Ec799eFF8858bf117);
            _rewardToken = IERC20(0xBeC5938FD565CbEc72107eE39CdE1bc78049537d);
        } else if (block.chainid == 3 || block.chainid == 4  || block.chainid == 97 || block.chainid == 5) {
            _nftContract = IERC721Metadata(0xb48408795A879d7e64A356bB71a2a22adE7a75eF);
            _rewardToken = IERC20(0x2891372D5c2727aC939BF111C45333735d537f09);
        } else {
            revert("Unknown Chain ID");
        }

        enabled = true;
        timeBetweenRewards = 1 days;
        startTime = block.timestamp;
        rewardPerToken = 8 * 10 ** 18;
        minimumStakeTime = 7 days;

    }

    function info() external view returns (
        StakedNftInfo[] memory stakedNfts,
        address rewardToken,
        address nftContract,
        StakeInfo memory settings
    ) {
        uint256 totalStaked = ownerStakings[msg.sender].length;
        stakedNfts = new StakedNftInfo[](totalStaked);
        for (uint256 i = 0; i < totalStaked; i ++) {

            uint256 index = indexMap[ownerStakings[msg.sender][i]];
            Stake storage s = stakings[index];

            (uint256 owed,) = rewardsOwed(s);
            stakedNfts[i] = StakedNftInfo(
                s.tokenId,
                _nftContract.tokenURI(s.tokenId),
                s.stakeTime,
                owed,
                s.lastClaimTime,
                timeUntilReward(s)
             );
        }

        rewardToken = address(_rewardToken);
        nftContract = address(_nftContract);

        settings = StakeInfo(
            enabled, 
            timeBetweenRewards, 
            rewardPerToken, 
            minimumStakeTime
        );
    }

    function stake(uint256 tokenId) external whenEnabled() {
        require(_nftContract.getApproved(tokenId) == address(this), "Must approve this contract as an operator");
        _nftContract.safeTransferFrom(msg.sender, address(this), tokenId);
        Stake memory s = Stake(msg.sender, tokenId, block.timestamp, block.timestamp, 0);
        indexMap[tokenId] = stakings.length;
        stakings.push(s);
        ownerStakings[msg.sender].push(tokenId);
    }

    function unstake(uint256 tokenId) external {

        uint256 index = indexMap[tokenId];
        Stake storage s = stakings[index];

        require(s.unstakeTime == 0, "This NFT has already been unstaked");
        require(s.holder == msg.sender || msg.sender == owner, "You do not own this token");

        if (enabled) {
            claimWalletRewards(s.holder);
        }

        _nftContract.safeTransferFrom(address(this), s.holder, tokenId);
        s.unstakeTime = block.timestamp;
        removeOwnerStaking(s.holder, tokenId);
    }
 
    function claimRewards() external whenEnabled() {
        claimWalletRewards(msg.sender);
    }


    // Admin Methods

    function removeEth() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner).transfer(balance);
    }
    
    function removeTokens(address token) external onlyOwner {
        uint256 balance = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(owner, balance);
    }

    function forceUnstake(uint256 tokenId) external onlyOwner {
        uint256 index = indexMap[tokenId];
        Stake storage s = stakings[index];
        _nftContract.safeTransferFrom(address(this), s.holder, tokenId);
    }

    function setOwner(address who) external onlyOwner {
        require(who != address(0), "cannot be zero address");
        owner = who;
    }

    function setEnabled(bool on) external onlyOwner {
        enabled = on;
    }

    function configureStake(uint256 _timeBetweenRewards, uint256 _rewardPerToken, uint256 _minimumStakeTime) external onlyOwner {
        timeBetweenRewards = _timeBetweenRewards;
        rewardPerToken = _rewardPerToken;
        minimumStakeTime = _minimumStakeTime;
    }


    // Private Methods

    function removeOwnerStaking(address holder, uint256 tokenId) private {
        bool found;
        uint256 index = 0;
        for (index; index < ownerStakings[holder].length; index++) {
            if (ownerStakings[holder][index] == tokenId) {
                found = true;
                break;
            } 
        }

        if (found) {
            if (ownerStakings[holder].length > 1) {
                ownerStakings[holder][index] = ownerStakings[holder][ownerStakings[holder].length-1];
            }
            ownerStakings[holder].pop();
        }
    }

    function claimWalletRewards(address wallet) private {
        uint256 totalOwed;
        
        for (uint256 i = 0; i < ownerStakings[wallet].length; i ++) {
            
            uint256 index = indexMap[ownerStakings[wallet][i]];
            (uint256 owed, uint256 time) = rewardsOwed(stakings[index]);
            if (owed > 0) {
                totalOwed += owed;
                stakings[index].lastClaimTime = stakings[index].lastClaimTime + time;
            }
        }

        if (totalOwed > 0) {
            _rewardToken.transfer(wallet, totalOwed);
        }
    }

    function timeUntilReward(Stake storage stakedToken) private view returns (uint256) {

        if (block.timestamp - stakedToken.stakeTime < minimumStakeTime) {
            return minimumStakeTime - (block.timestamp - stakedToken.stakeTime);
        }

        uint256 lastClaimTime = stakedToken.stakeTime;
        if (startTime > lastClaimTime) {
            lastClaimTime = startTime;
        } else if (stakedToken.lastClaimTime > lastClaimTime) {
            lastClaimTime = stakedToken.lastClaimTime;
        }

        if (block.timestamp - lastClaimTime >= timeBetweenRewards) {
            return timeBetweenRewards - ((block.timestamp - lastClaimTime) % timeBetweenRewards);
        }

        return timeBetweenRewards - (block.timestamp - lastClaimTime);
    }

    function rewardsOwed(Stake storage stakedToken) private view returns (uint256, uint256) {

        uint256 unstakeTime = block.timestamp;
        if (stakedToken.unstakeTime > 0) {
            unstakeTime = stakedToken.unstakeTime;
        }

        if (unstakeTime - stakedToken.stakeTime >= minimumStakeTime) {
            uint256 lastClaimTime = stakedToken.stakeTime;
            if (startTime > lastClaimTime) {
                lastClaimTime = startTime;
            } else if (stakedToken.lastClaimTime > lastClaimTime) {
                lastClaimTime = stakedToken.lastClaimTime;
            }

            if (unstakeTime - lastClaimTime >= timeBetweenRewards) {
                uint256 multiplesOwed = (unstakeTime - lastClaimTime) / timeBetweenRewards;
                return (
                    multiplesOwed * rewardPerToken,
                    multiplesOwed * timeBetweenRewards
                );
            }
        }

        return (0, 0);
    }

    function onERC721Received(address, address, uint256, bytes memory) public pure override returns(bytes4) {
        return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"_minimumStakeTime","type":"uint256"}],"name":"configureStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"forceUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"info","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"owed","type":"uint256"},{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"timeUntilNextReward","type":"uint256"}],"internalType":"struct OgStake.StakedNftInfo[]","name":"stakedNfts","type":"tuple[]"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"address","name":"nftContract","type":"address"},{"components":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"}],"internalType":"struct OgStake.StakeInfo","name":"settings","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"on","type":"bool"}],"name":"setEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600680546001600160a01b03191633179055466001141561007957600a80546001600160a01b0319908116735b9d7ee3ba252c41a07c2d6ec799eff8858bf11717909155600b805490911673bec5938fd565cbec72107ee39cde1bc78049537d17905561012f565b46600314806100885750466004145b806100935750466061145b8061009e5750466005145b156100f057600a80546001600160a01b031990811673b48408795a879d7e64a356bb71a2a22ade7a75ef17909155600b8054909116732891372d5c2727ac939bf111c45333735d537f0917905561012f565b60405162461bcd60e51b815260206004820152601060248201526f155b9adb9bdddb8810da185a5b88125160821b604482015260640160405180910390fd5b6000805460ff1916600190811790915562015180905542600455676f05b59d3b20000060025562093a806003556116698061016b6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063372500ab11610071578063372500ab14610169578063553c38f8146101715780638da5cb5b1461018457806391460149146101af578063a694fc3a146101c2578063fc50baf5146101d557600080fd5b806313af4035146100b9578063150b7a02146100ce5780631f4a6d32146101235780632e17de781461012b578063328d8f721461013e578063370158ea14610151575b600080fd5b6100cc6100c736600461113d565b6101e8565b005b6101056100dc366004611177565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6100cc61028c565b6100cc6101393660046112d7565b6102f4565b6100cc61014c366004611226565b6104a3565b6101596104e0565b60405161011a9493929190611335565b6100cc61076d565b6100cc61017f366004611309565b6107d5565b600654610197906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6100cc6101bd3660046112d7565b61080d565b6100cc6101d03660046112d7565b6108e3565b6100cc6101e336600461113d565b610bd7565b6006546001600160a01b0316331461021b5760405162461bcd60e51b815260040161021290611441565b60405180910390fd5b6001600160a01b03811661026a5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610212565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146102b65760405162461bcd60e51b815260040161021290611441565b60065460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156102f0573d6000803e3d6000fd5b5050565b600081815260096020526040812054600580549192918390811061031a5761031a6115e1565b9060005260206000209060050201905080600401546000146103895760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b6064820152608401610212565b80546001600160a01b03163314806103ab57506006546001600160a01b031633145b6103f75760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610212565b60005460ff1615610416578054610416906001600160a01b0316610d04565b600a548154604051632142170760e11b81523060048201526001600160a01b039182166024820152604481018690529116906342842e0e90606401600060405180830381600087803b15801561046b57600080fd5b505af115801561047f573d6000803e3d6000fd5b50504260048401555050805461049e906001600160a01b031684610e65565b505050565b6006546001600160a01b031633146104cd5760405162461bcd60e51b815260040161021290611441565b6000805460ff1916911515919091179055565b606060008061051260405180608001604052806000151581526020016000815260200160008152602001600081525090565b336000908152600860205260409020548067ffffffffffffffff81111561053b5761053b6115f7565b6040519080825280602002602001820160405280156105a557816020015b6105926040518060c001604052806000815260200160608152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816105595790505b50945060005b8181101561071d5733600090815260086020526040812080546009918391859081106105d9576105d96115e1565b9060005260206000200154815260200190815260200160002054905060006005828154811061060a5761060a6115e1565b90600052602060002090600502019050600061062582610fd1565b506040805160c0810182526001850154808252600a54925163c87b56dd60e01b815260048101919091529293509160208301916001600160a01b03169063c87b56dd9060240160006040518083038186803b15801561068357600080fd5b505afa158015610697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bf9190810190611260565b815260200183600201548152602001828152602001836003015481526020016106e78461108e565b8152508985815181106106fc576106fc6115e1565b6020026020010181905250505050808061071590611570565b9150506105ab565b5050600b54600a546040805160808101825260005460ff1615158152600154602082015260025491810191909152600354606082015295966001600160a01b039283169691909216945092509050565b60005460ff168061078857506006546001600160a01b031633145b6107ca5760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610212565b6107d333610d04565b565b6006546001600160a01b031633146107ff5760405162461bcd60e51b815260040161021290611441565b600192909255600255600355565b6006546001600160a01b031633146108375760405162461bcd60e51b815260040161021290611441565b600081815260096020526040812054600580549192918390811061085d5761085d6115e1565b60009182526020909120600a546005909202018054604051632142170760e11b81523060048201526001600160a01b03918216602482015260448101879052919350909116906342842e0e90606401600060405180830381600087803b1580156108c657600080fd5b505af11580156108da573d6000803e3d6000fd5b50505050505050565b60005460ff16806108fe57506006546001600160a01b031633145b6109405760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610212565b600a5460405163020604bf60e21b81526004810183905230916001600160a01b03169063081812fc9060240160206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc919061115a565b6001600160a01b031614610a245760405162461bcd60e51b815260206004820152602960248201527f4d75737420617070726f7665207468697320636f6e747261637420617320616e6044820152681037b832b930ba37b960b91b6064820152608401610212565b600a54604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b50506040805160a0810182523380825260208083018781524284860181815260608601918252600060808701818152600580548d8452600988528a842081905560018082018355828552995191027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0810180546001600160a01b03939093166001600160a01b03199093169290921790915594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db186015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db285015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db490920191909155918252600881529281208054928301815581529190912001929092555050565b6006546001600160a01b03163314610c015760405162461bcd60e51b815260040161021290611441565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b91906112f0565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b602060405180830381600087803b158015610ccc57600080fd5b505af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611243565b6000805b6001600160a01b038316600090815260086020526040902054811015610e25576001600160a01b03831660009081526008602052604081208054600991839185908110610d5757610d576115e1565b90600052602060002001548152602001908152602001600020549050600080610d9f60058481548110610d8c57610d8c6115e1565b9060005260206000209060050201610fd1565b90925090508115610e0f57610db482866114e2565b94508060058481548110610dca57610dca6115e1565b906000526020600020906005020160030154610de691906114e2565b60058481548110610df957610df96115e1565b9060005260206000209060050201600301819055505b5050508080610e1d90611570565b915050610d08565b5080156102f057600b5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401610cb2565b6000805b6001600160a01b038416600090815260086020526040902054811015610ee2576001600160a01b0384166000908152600860205260409020805484919083908110610eb657610eb66115e1565b90600052602060002001541415610ed05760019150610ee2565b80610eda81611570565b915050610e69565b8115610fcb576001600160a01b03841660009081526008602052604090205460011015610f8d576001600160a01b03841660009081526008602052604090208054610f2f9060019061152d565b81548110610f3f57610f3f6115e1565b906000526020600020015460086000866001600160a01b03166001600160a01b031681526020019081526020016000208281548110610f8057610f806115e1565b6000918252602090912001555b6001600160a01b0384166000908152600860205260409020805480610fb457610fb46115cb565b600190038181906000526020600020016000905590555b50505050565b60048101546000908190429015610fe9575060048301545b6003546002850154610ffb908361152d565b10611082576002840154600454811015611018575060045461102b565b808560030154111561102b575060038401545b600154611038828461152d565b106110805760015460009061104d838561152d565b61105791906114fa565b905060025481611067919061150e565b600154611074908361150e565b94509450505050915091565b505b50600093849350915050565b60006003548260020154426110a3919061152d565b10156110cb5760028201546110b8904261152d565b6003546110c5919061152d565b92915050565b60028201546004548110156110e357506004546110f6565b80836003015411156110f6575060038201545b600154611103824261152d565b1061113357600154611115824261152d565b61111f919061158b565b60015461112c919061152d565b9392505050565b61111f814261152d565b60006020828403121561114f57600080fd5b813561112c8161160d565b60006020828403121561116c57600080fd5b815161112c8161160d565b6000806000806080858703121561118d57600080fd5b84356111988161160d565b935060208501356111a88161160d565b925060408501359150606085013567ffffffffffffffff8111156111cb57600080fd5b8501601f810187136111dc57600080fd5b80356111ef6111ea826114ba565b611489565b81815288602083850101111561120457600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60006020828403121561123857600080fd5b813561112c81611625565b60006020828403121561125557600080fd5b815161112c81611625565b60006020828403121561127257600080fd5b815167ffffffffffffffff81111561128957600080fd5b8201601f8101841361129a57600080fd5b80516112a86111ea826114ba565b8181528560208385010111156112bd57600080fd5b6112ce826020830160208601611544565b95945050505050565b6000602082840312156112e957600080fd5b5035919050565b60006020828403121561130257600080fd5b5051919050565b60008060006060848603121561131e57600080fd5b505081359360208301359350604090920135919050565b60e0808252855182820181905260009190610100600582901b8501810191908501906020808b01865b838110156113e05760ff19898703018552815160c0815188528482015181868a0152805180838b0152611396818c8c01898501611544565b604084810151908b0152606080850151908b0152608080850151908b015260a093840151938a01939093525050601f01601f1916909501860194938201939082019060010161135e565b50508395506113f98188018b6001600160a01b03169052565b505050505061141360408301856001600160a01b03169052565b8251151560608381019190915260208401516080840152604084015160a084015283015160c08301526112ce565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156114b2576114b26115f7565b604052919050565b600067ffffffffffffffff8211156114d4576114d46115f7565b50601f01601f191660200190565b600082198211156114f5576114f561159f565b500190565b600082611509576115096115b5565b500490565b60008160001904831182151516156115285761152861159f565b500290565b60008282101561153f5761153f61159f565b500390565b60005b8381101561155f578181015183820152602001611547565b83811115610fcb5750506000910152565b60006000198214156115845761158461159f565b5060010190565b60008261159a5761159a6115b5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461162257600080fd5b50565b801515811461162257600080fdfea26469706673582212209e372afec0d8b599c9eac49b92680906323202ca49e850c0b4e2cc1524ff8e8b64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063372500ab11610071578063372500ab14610169578063553c38f8146101715780638da5cb5b1461018457806391460149146101af578063a694fc3a146101c2578063fc50baf5146101d557600080fd5b806313af4035146100b9578063150b7a02146100ce5780631f4a6d32146101235780632e17de781461012b578063328d8f721461013e578063370158ea14610151575b600080fd5b6100cc6100c736600461113d565b6101e8565b005b6101056100dc366004611177565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6100cc61028c565b6100cc6101393660046112d7565b6102f4565b6100cc61014c366004611226565b6104a3565b6101596104e0565b60405161011a9493929190611335565b6100cc61076d565b6100cc61017f366004611309565b6107d5565b600654610197906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6100cc6101bd3660046112d7565b61080d565b6100cc6101d03660046112d7565b6108e3565b6100cc6101e336600461113d565b610bd7565b6006546001600160a01b0316331461021b5760405162461bcd60e51b815260040161021290611441565b60405180910390fd5b6001600160a01b03811661026a5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610212565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146102b65760405162461bcd60e51b815260040161021290611441565b60065460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156102f0573d6000803e3d6000fd5b5050565b600081815260096020526040812054600580549192918390811061031a5761031a6115e1565b9060005260206000209060050201905080600401546000146103895760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b6064820152608401610212565b80546001600160a01b03163314806103ab57506006546001600160a01b031633145b6103f75760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610212565b60005460ff1615610416578054610416906001600160a01b0316610d04565b600a548154604051632142170760e11b81523060048201526001600160a01b039182166024820152604481018690529116906342842e0e90606401600060405180830381600087803b15801561046b57600080fd5b505af115801561047f573d6000803e3d6000fd5b50504260048401555050805461049e906001600160a01b031684610e65565b505050565b6006546001600160a01b031633146104cd5760405162461bcd60e51b815260040161021290611441565b6000805460ff1916911515919091179055565b606060008061051260405180608001604052806000151581526020016000815260200160008152602001600081525090565b336000908152600860205260409020548067ffffffffffffffff81111561053b5761053b6115f7565b6040519080825280602002602001820160405280156105a557816020015b6105926040518060c001604052806000815260200160608152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816105595790505b50945060005b8181101561071d5733600090815260086020526040812080546009918391859081106105d9576105d96115e1565b9060005260206000200154815260200190815260200160002054905060006005828154811061060a5761060a6115e1565b90600052602060002090600502019050600061062582610fd1565b506040805160c0810182526001850154808252600a54925163c87b56dd60e01b815260048101919091529293509160208301916001600160a01b03169063c87b56dd9060240160006040518083038186803b15801561068357600080fd5b505afa158015610697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bf9190810190611260565b815260200183600201548152602001828152602001836003015481526020016106e78461108e565b8152508985815181106106fc576106fc6115e1565b6020026020010181905250505050808061071590611570565b9150506105ab565b5050600b54600a546040805160808101825260005460ff1615158152600154602082015260025491810191909152600354606082015295966001600160a01b039283169691909216945092509050565b60005460ff168061078857506006546001600160a01b031633145b6107ca5760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610212565b6107d333610d04565b565b6006546001600160a01b031633146107ff5760405162461bcd60e51b815260040161021290611441565b600192909255600255600355565b6006546001600160a01b031633146108375760405162461bcd60e51b815260040161021290611441565b600081815260096020526040812054600580549192918390811061085d5761085d6115e1565b60009182526020909120600a546005909202018054604051632142170760e11b81523060048201526001600160a01b03918216602482015260448101879052919350909116906342842e0e90606401600060405180830381600087803b1580156108c657600080fd5b505af11580156108da573d6000803e3d6000fd5b50505050505050565b60005460ff16806108fe57506006546001600160a01b031633145b6109405760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610212565b600a5460405163020604bf60e21b81526004810183905230916001600160a01b03169063081812fc9060240160206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc919061115a565b6001600160a01b031614610a245760405162461bcd60e51b815260206004820152602960248201527f4d75737420617070726f7665207468697320636f6e747261637420617320616e6044820152681037b832b930ba37b960b91b6064820152608401610212565b600a54604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b50506040805160a0810182523380825260208083018781524284860181815260608601918252600060808701818152600580548d8452600988528a842081905560018082018355828552995191027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0810180546001600160a01b03939093166001600160a01b03199093169290921790915594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db186015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db285015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db3840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db490920191909155918252600881529281208054928301815581529190912001929092555050565b6006546001600160a01b03163314610c015760405162461bcd60e51b815260040161021290611441565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b91906112f0565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b602060405180830381600087803b158015610ccc57600080fd5b505af1158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611243565b6000805b6001600160a01b038316600090815260086020526040902054811015610e25576001600160a01b03831660009081526008602052604081208054600991839185908110610d5757610d576115e1565b90600052602060002001548152602001908152602001600020549050600080610d9f60058481548110610d8c57610d8c6115e1565b9060005260206000209060050201610fd1565b90925090508115610e0f57610db482866114e2565b94508060058481548110610dca57610dca6115e1565b906000526020600020906005020160030154610de691906114e2565b60058481548110610df957610df96115e1565b9060005260206000209060050201600301819055505b5050508080610e1d90611570565b915050610d08565b5080156102f057600b5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401610cb2565b6000805b6001600160a01b038416600090815260086020526040902054811015610ee2576001600160a01b0384166000908152600860205260409020805484919083908110610eb657610eb66115e1565b90600052602060002001541415610ed05760019150610ee2565b80610eda81611570565b915050610e69565b8115610fcb576001600160a01b03841660009081526008602052604090205460011015610f8d576001600160a01b03841660009081526008602052604090208054610f2f9060019061152d565b81548110610f3f57610f3f6115e1565b906000526020600020015460086000866001600160a01b03166001600160a01b031681526020019081526020016000208281548110610f8057610f806115e1565b6000918252602090912001555b6001600160a01b0384166000908152600860205260409020805480610fb457610fb46115cb565b600190038181906000526020600020016000905590555b50505050565b60048101546000908190429015610fe9575060048301545b6003546002850154610ffb908361152d565b10611082576002840154600454811015611018575060045461102b565b808560030154111561102b575060038401545b600154611038828461152d565b106110805760015460009061104d838561152d565b61105791906114fa565b905060025481611067919061150e565b600154611074908361150e565b94509450505050915091565b505b50600093849350915050565b60006003548260020154426110a3919061152d565b10156110cb5760028201546110b8904261152d565b6003546110c5919061152d565b92915050565b60028201546004548110156110e357506004546110f6565b80836003015411156110f6575060038201545b600154611103824261152d565b1061113357600154611115824261152d565b61111f919061158b565b60015461112c919061152d565b9392505050565b61111f814261152d565b60006020828403121561114f57600080fd5b813561112c8161160d565b60006020828403121561116c57600080fd5b815161112c8161160d565b6000806000806080858703121561118d57600080fd5b84356111988161160d565b935060208501356111a88161160d565b925060408501359150606085013567ffffffffffffffff8111156111cb57600080fd5b8501601f810187136111dc57600080fd5b80356111ef6111ea826114ba565b611489565b81815288602083850101111561120457600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60006020828403121561123857600080fd5b813561112c81611625565b60006020828403121561125557600080fd5b815161112c81611625565b60006020828403121561127257600080fd5b815167ffffffffffffffff81111561128957600080fd5b8201601f8101841361129a57600080fd5b80516112a86111ea826114ba565b8181528560208385010111156112bd57600080fd5b6112ce826020830160208601611544565b95945050505050565b6000602082840312156112e957600080fd5b5035919050565b60006020828403121561130257600080fd5b5051919050565b60008060006060848603121561131e57600080fd5b505081359360208301359350604090920135919050565b60e0808252855182820181905260009190610100600582901b8501810191908501906020808b01865b838110156113e05760ff19898703018552815160c0815188528482015181868a0152805180838b0152611396818c8c01898501611544565b604084810151908b0152606080850151908b0152608080850151908b015260a093840151938a01939093525050601f01601f1916909501860194938201939082019060010161135e565b50508395506113f98188018b6001600160a01b03169052565b505050505061141360408301856001600160a01b03169052565b8251151560608381019190915260208401516080840152604084015160a084015283015160c08301526112ce565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156114b2576114b26115f7565b604052919050565b600067ffffffffffffffff8211156114d4576114d46115f7565b50601f01601f191660200190565b600082198211156114f5576114f561159f565b500190565b600082611509576115096115b5565b500490565b60008160001904831182151516156115285761152861159f565b500290565b60008282101561153f5761153f61159f565b500390565b60005b8381101561155f578181015183820152602001611547565b83811115610fcb5750506000910152565b60006000198214156115845761158461159f565b5060010190565b60008261159a5761159a6115b5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461162257600080fd5b50565b801515811461162257600080fdfea26469706673582212209e372afec0d8b599c9eac49b92680906323202ca49e850c0b4e2cc1524ff8e8b64736f6c63430008070033

Deployed Bytecode Sourcemap

2442:8632:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7326:143;;;;;;:::i;:::-;;:::i;:::-;;10871:198;;;;;;:::i;:::-;11000:60;10871:198;;;;;;;;;;-1:-1:-1;;;;;;6719:33:1;;;6701:52;;6689:2;6674:18;10871:198:0;;;;;;;;6749:141;;;:::i;6051:559::-;;;;;;:::i;:::-;;:::i;7477:79::-;;;;;;:::i;:::-;;:::i;4500:1067::-;;;:::i;:::-;;;;;;;;;;:::i;6619:96::-;;;:::i;7564:273::-;;;;;;:::i;:::-;;:::i;3198:20::-;;;;;-1:-1:-1;;;;;3198:20:0;;;;;;-1:-1:-1;;;;;3930:32:1;;;3912:51;;3900:2;3885:18;3198:20:0;3766:203:1;7090:228:0;;;;;;:::i;:::-;;:::i;5575:468::-;;;;;;:::i;:::-;;:::i;6902:180::-;;;;;;:::i;:::-;;:::i;7326:143::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;7395:17:0;::::1;7387:52;;;::::0;-1:-1:-1;;;7387:52:0;;8890:2:1;7387:52:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;-1:-1:-1;;;8948:18:1;;;8941:52;9010:18;;7387:52:0::1;8688:346:1::0;7387:52:0::1;7450:5;:11:::0;;-1:-1:-1;;;;;;7450:11:0::1;-1:-1:-1::0;;;;;7450:11:0;;;::::1;::::0;;;::::1;::::0;;7326:143::o;6749:141::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;6858:5:::1;::::0;6850:32:::1;::::0;6818:21:::1;::::0;-1:-1:-1;;;;;6858:5:0::1;::::0;6850:32;::::1;;;::::0;6818:21;;6800:15:::1;6850:32:::0;6800:15;6850:32;6818:21;6858:5;6850:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6789:101;6749:141::o:0;6051:559::-;6107:13;6123:17;;;:8;:17;;;;;;6169:8;:15;;6123:17;;6107:13;6123:17;;6169:15;;;;;;:::i;:::-;;;;;;;;;;;6151:33;;6205:1;:13;;;6222:1;6205:18;6197:65;;;;-1:-1:-1;;;6197:65:0;;8487:2:1;6197:65:0;;;8469:21:1;8526:2;8506:18;;;8499:30;8565:34;8545:18;;;8538:62;-1:-1:-1;;;8616:18:1;;;8609:32;8658:19;;6197:65:0;8285:398:1;6197:65:0;6281:8;;-1:-1:-1;;;;;6281:8:0;6293:10;6281:22;;:45;;-1:-1:-1;6321:5:0;;-1:-1:-1;;;;;6321:5:0;6307:10;:19;6281:45;6273:83;;;;-1:-1:-1;;;6273:83:0;;6966:2:1;6273:83:0;;;6948:21:1;7005:2;6985:18;;;6978:30;7044:27;7024:18;;;7017:55;7089:18;;6273:83:0;6764:349:1;6273:83:0;6373:7;;;;6369:68;;;6416:8;;6397:28;;-1:-1:-1;;;;;6416:8:0;6397:18;:28::i;:::-;6449:12;;6494:8;;6449:63;;-1:-1:-1;;;6449:63:0;;6487:4;6449:63;;;4214:34:1;-1:-1:-1;;;;;6494:8:0;;;4264:18:1;;;4257:43;4316:18;;;4309:34;;;6449:12:0;;;:29;;4149:18:1;;6449:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6539:15:0;6523:13;;;:31;-1:-1:-1;;6584:8:0;;6565:37;;-1:-1:-1;;;;;6584:8:0;6594:7;6565:18;:37::i;:::-;6094:516;;6051:559;:::o;7477:79::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;7536:7:::1;:12:::0;;-1:-1:-1;;7536:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7477:79::o;4500:1067::-;4549:33;4593:19;4623;4653:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4653:25:0;4733:10;4697:19;4719:25;;;:13;:25;;;;;:32;;4775;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4775:32:0;;;;;;;;;;;;;;;;;4762:45;;4823:9;4818:486;4842:11;4838:1;:15;4818:486;;;4917:10;4878:13;4903:25;;;:13;:25;;;;;:28;;4894:8;;4878:13;;4929:1;;4903:28;;;;;;:::i;:::-;;;;;;;;;4894:38;;;;;;;;;;;;4878:54;;4947:15;4965:8;4974:5;4965:15;;;;;;;;:::i;:::-;;;;;;;;;;;4947:33;;4998:12;5015:14;5027:1;5015:11;:14::i;:::-;-1:-1:-1;5060:232:0;;;;;;;;5092:9;;;;5060:232;;;5120:12;;:32;;-1:-1:-1;;;5120:32:0;;;;;9185:25:1;;;;4997:32:0;;-1:-1:-1;5060:232:0;;;;;-1:-1:-1;;;;;5120:12:0;;:21;;9158:18:1;;5120:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5120:32:0;;;;;;;;;;;;:::i;:::-;5060:232;;;;5171:1;:11;;;5060:232;;;;5201:4;5060:232;;;;5224:1;:15;;;5060:232;;;;5258:18;5274:1;5258:15;:18::i;:::-;5060:232;;;5044:10;5055:1;5044:13;;;;;;;;:::i;:::-;;;;;;:248;;;;4861:443;;;4855:4;;;;;:::i;:::-;;;;4818:486;;;-1:-1:-1;;5338:12:0;;5384;;5421:138;;;;;;;;5338:12;5445:7;;;5421:138;;;;5338:12;5468:18;5421:138;;;;5502:14;;5421:138;;;;;;;5532:16;;5421:138;;;;4500:1067;;-1:-1:-1;;;;;5338:12:0;;;;5384;;;;;-1:-1:-1;5421:138:0;-1:-1:-1;4500:1067:0;-1:-1:-1;4500:1067:0:o;6619:96::-;3623:7;;;;;:30;;-1:-1:-1;3648:5:0;;-1:-1:-1;;;;;3648:5:0;3634:10;:19;3623:30;3615:62;;;;-1:-1:-1;;;3615:62:0;;7320:2:1;3615:62:0;;;7302:21:1;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7378:18:1;;;7371:49;7437:18;;3615:62:0;7118:343:1;3615:62:0;6677:30:::1;6696:10;6677:18;:30::i;:::-;6619:96::o:0;7564:273::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;7699:18:::1;:40:::0;;;;7750:14:::1;:32:::0;7793:16:::1;:36:::0;7564:273::o;7090:228::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;7159:13:::1;7175:17:::0;;;:8:::1;:17;::::0;;;;;7221:8:::1;:15:::0;;7175:17;;7159:13;7175:17;;7221:15;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;7247:12:::1;::::0;7221:15:::1;::::0;;::::1;;7292:8:::0;;7247:63:::1;::::0;-1:-1:-1;;;7247:63:0;;7285:4:::1;7247:63;::::0;::::1;4214:34:1::0;-1:-1:-1;;;;;7292:8:0;;::::1;4264:18:1::0;;;4257:43;4316:18;;;4309:34;;;7221:15:0;;-1:-1:-1;7247:12:0;;::::1;::::0;:29:::1;::::0;4149:18:1;;7247:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7148:170;;7090:228:::0;:::o;5575:468::-;3623:7;;;;;:30;;-1:-1:-1;3648:5:0;;-1:-1:-1;;;;;3648:5:0;3634:10;:19;3623:30;3615:62;;;;-1:-1:-1;;;3615:62:0;;7320:2:1;3615:62:0;;;7302:21:1;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7378:18:1;;;7371:49;7437:18;;3615:62:0;7118:343:1;3615:62:0;5649:12:::1;::::0;:33:::1;::::0;-1:-1:-1;;;5649:33:0;;::::1;::::0;::::1;9185:25:1::0;;;5694:4:0::1;::::0;-1:-1:-1;;;;;5649:12:0::1;::::0;:24:::1;::::0;9158:18:1;;5649:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5649:50:0::1;;5641:104;;;::::0;-1:-1:-1;;;5641:104:0;;7668:2:1;5641:104:0::1;::::0;::::1;7650:21:1::0;7707:2;7687:18;;;7680:30;7746:34;7726:18;;;7719:62;-1:-1:-1;;;7797:18:1;;;7790:39;7846:19;;5641:104:0::1;7466:405:1::0;5641:104:0::1;5756:12;::::0;:65:::1;::::0;-1:-1:-1;;;5756:65:0;;5786:10:::1;5756:65;::::0;::::1;4214:34:1::0;5806:4:0::1;4264:18:1::0;;;4257:43;4316:18;;;4309:34;;;-1:-1:-1;;;;;5756:12:0;;::::1;::::0;:29:::1;::::0;4149:18:1;;5756:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5849:63:0::1;::::0;;::::1;::::0;::::1;::::0;;5855:10:::1;5849:63:::0;;;::::1;::::0;;::::1;::::0;;;5876:15:::1;5849:63:::0;;;;;;;;;;;;5832:14:::1;5849:63:::0;;;;;;5943:8:::1;:15:::0;;5923:17;;;:8:::1;:17:::0;;;;;:35;;;5969:16:::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;5969:16:0;;;::::1;-1:-1:-1::0;;;;;;5969:16:0;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5996:25;;;:13:::1;:25:::0;;;;;:39;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;-1:-1:-1;;5575:468:0:o;6902:180::-;3503:5;;-1:-1:-1;;;;;3503:5:0;3489:10;:19;3481:72;;;;-1:-1:-1;;;3481:72:0;;;;;;;:::i;:::-;6987:38:::1;::::0;-1:-1:-1;;;6987:38:0;;7019:4:::1;6987:38;::::0;::::1;3912:51:1::0;6969:15:0::1;::::0;-1:-1:-1;;;;;6987:23:0;::::1;::::0;::::1;::::0;3885:18:1;;6987:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7059:5;::::0;7036:38:::1;::::0;-1:-1:-1;;;7036:38:0;;-1:-1:-1;;;;;7059:5:0;;::::1;7036:38;::::0;::::1;4528:51:1::0;4595:18;;;4588:34;;;6969:56:0;;-1:-1:-1;7036:22:0;::::1;::::0;::::1;::::0;4501:18:1;;7036:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8467:598::-:0;8530:17;;8568:392;-1:-1:-1;;;;;8592:21:0;;;;;;:13;:21;;;;;:28;8588:32;;8568:392;;;-1:-1:-1;;;;;8682:21:0;;8657:13;8682:21;;;:13;:21;;;;;:24;;8673:8;;8657:13;;8704:1;;8682:24;;;;;;:::i;:::-;;;;;;;;;8673:34;;;;;;;;;;;;8657:50;;8723:12;8737;8753:28;8765:8;8774:5;8765:15;;;;;;;;:::i;:::-;;;;;;;;;;;8753:11;:28::i;:::-;8722:59;;-1:-1:-1;8722:59:0;-1:-1:-1;8800:8:0;;8796:153;;8829:17;8842:4;8829:17;;:::i;:::-;;;8929:4;8897:8;8906:5;8897:15;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;:36;;;;:::i;:::-;8865:8;8874:5;8865:15;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:68;;;;8796:153;8628:332;;;8622:4;;;;;:::i;:::-;;;;8568:392;;;-1:-1:-1;8976:13:0;;8972:86;;9006:12;;:40;;-1:-1:-1;;;9006:40:0;;-1:-1:-1;;;;;4546:32:1;;;9006:40:0;;;4528:51:1;4595:18;;;4588:34;;;9006:12:0;;;;:21;;4501:18:1;;9006:40:0;4354:274:1;7873:586:0;7953:10;;8002:202;-1:-1:-1;;;;;8022:21:0;;;;;;:13;:21;;;;;:28;8014:36;;8002:202;;;-1:-1:-1;;;;;8080:21:0;;;;;;:13;:21;;;;;:28;;8112:7;;8080:21;8102:5;;8080:28;;;;;;:::i;:::-;;;;;;;;;:39;8076:116;;;8148:4;8140:12;;8171:5;;8076:116;8052:7;;;;:::i;:::-;;;;8002:202;;;8220:5;8216:236;;;-1:-1:-1;;;;;8246:21:0;;;;;;:13;:21;;;;;:28;8277:1;-1:-1:-1;8242:157:0;;;-1:-1:-1;;;;;8330:21:0;;;;;;:13;:21;;;;;8352:28;;:30;;8381:1;;8352:30;:::i;:::-;8330:53;;;;;;;;:::i;:::-;;;;;;;;;8299:13;:21;8313:6;-1:-1:-1;;;;;8299:21:0;-1:-1:-1;;;;;8299:21:0;;;;;;;;;;;;8321:5;8299:28;;;;;;;;:::i;:::-;;;;;;;;;;:84;8242:157;-1:-1:-1;;;;;8413:21:0;;;;;;:13;:21;;;;;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8216:236;7942:517;;7873:586;;:::o;9870:993::-;10023:23;;;;9940:7;;;;9993:15;;10023:27;10019:97;;-1:-1:-1;10081:23:0;;;;10019:97;10171:16;;10146:21;;;;10132:35;;:11;:35;:::i;:::-;:55;10128:702;;10228:21;;;;10268:9;;:25;-1:-1:-1;10264:220:0;;;-1:-1:-1;10330:9:0;;10264:220;;;10393:13;10365:11;:25;;;:41;10361:123;;;-1:-1:-1;10443:25:0;;;;10361:123;10535:18;;10504:27;10518:13;10504:11;:27;:::i;:::-;:49;10500:319;;10630:18;;10574:21;;10599:27;10613:13;10599:11;:27;:::i;:::-;10598:50;;;;:::i;:::-;10574:74;;10713:14;;10697:13;:30;;;;:::i;:::-;10766:18;;10750:34;;:13;:34;:::i;:::-;10667:136;;;;;;;9870:993;;;:::o;10500:319::-;10189:641;10128:702;-1:-1:-1;10850:1:0;;;;-1:-1:-1;9870:993:0;-1:-1:-1;;9870:993:0:o;9073:789::-;9147:7;9215:16;;9191:11;:21;;;9173:15;:39;;;;:::i;:::-;:58;9169:158;;;9293:21;;;;9275:39;;:15;:39;:::i;:::-;9255:16;;:60;;;;:::i;:::-;9248:67;9073:789;-1:-1:-1;;9073:789:0:o;9169:158::-;9363:21;;;;9399:9;;:25;-1:-1:-1;9395:204:0;;;-1:-1:-1;9457:9:0;;9395:204;;;9516:13;9488:11;:25;;;:41;9484:115;;;-1:-1:-1;9562:25:0;;;;9484:115;9650:18;;9615:31;9633:13;9615:15;:31;:::i;:::-;:53;9611:170;;9750:18;;9715:31;9733:13;9715:15;:31;:::i;:::-;9714:54;;;;:::i;:::-;9692:18;;:77;;;;:::i;:::-;9685:84;9073:789;-1:-1:-1;;;9073:789:0:o;9611:170::-;9822:31;9840:13;9822:15;:31;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:1016::-;617:6;625;633;641;694:3;682:9;673:7;669:23;665:33;662:53;;;711:1;708;701:12;662:53;750:9;737:23;769:31;794:5;769:31;:::i;:::-;819:5;-1:-1:-1;876:2:1;861:18;;848:32;889:33;848:32;889:33;:::i;:::-;941:7;-1:-1:-1;995:2:1;980:18;;967:32;;-1:-1:-1;1050:2:1;1035:18;;1022:32;1077:18;1066:30;;1063:50;;;1109:1;1106;1099:12;1063:50;1132:22;;1185:4;1177:13;;1173:27;-1:-1:-1;1163:55:1;;1214:1;1211;1204:12;1163:55;1250:2;1237:16;1275:48;1291:31;1319:2;1291:31;:::i;:::-;1275:48;:::i;:::-;1346:2;1339:5;1332:17;1386:7;1381:2;1376;1372;1368:11;1364:20;1361:33;1358:53;;;1407:1;1404;1397:12;1358:53;1462:2;1457;1453;1449:11;1444:2;1437:5;1433:14;1420:45;1506:1;1501:2;1496;1489:5;1485:14;1481:23;1474:34;1527:5;1517:15;;;;;522:1016;;;;;;;:::o;1543:241::-;1599:6;1652:2;1640:9;1631:7;1627:23;1623:32;1620:52;;;1668:1;1665;1658:12;1620:52;1707:9;1694:23;1726:28;1748:5;1726:28;:::i;1789:245::-;1856:6;1909:2;1897:9;1888:7;1884:23;1880:32;1877:52;;;1925:1;1922;1915:12;1877:52;1957:9;1951:16;1976:28;1998:5;1976:28;:::i;2039:635::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;2221:9;2215:16;2254:18;2246:6;2243:30;2240:50;;;2286:1;2283;2276:12;2240:50;2309:22;;2362:4;2354:13;;2350:27;-1:-1:-1;2340:55:1;;2391:1;2388;2381:12;2340:55;2420:2;2414:9;2445:48;2461:31;2489:2;2461:31;:::i;2445:48::-;2516:2;2509:5;2502:17;2556:7;2551:2;2546;2542;2538:11;2534:20;2531:33;2528:53;;;2577:1;2574;2567:12;2528:53;2590:54;2641:2;2636;2629:5;2625:14;2620:2;2616;2612:11;2590:54;:::i;:::-;2663:5;2039:635;-1:-1:-1;;;;;2039:635:1:o;2679:180::-;2738:6;2791:2;2779:9;2770:7;2766:23;2762:32;2759:52;;;2807:1;2804;2797:12;2759:52;-1:-1:-1;2830:23:1;;2679:180;-1:-1:-1;2679:180:1:o;2864:184::-;2934:6;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;-1:-1:-1;3026:16:1;;2864:184;-1:-1:-1;2864:184:1:o;3053:316::-;3130:6;3138;3146;3199:2;3187:9;3178:7;3174:23;3170:32;3167:52;;;3215:1;3212;3205:12;3167:52;-1:-1:-1;;3238:23:1;;;3308:2;3293:18;;3280:32;;-1:-1:-1;3359:2:1;3344:18;;;3331:32;;3053:316;-1:-1:-1;3053:316:1:o;4633:1919::-;5000:3;5053:21;;;5123:13;;5026:18;;;5145:22;;;-1:-1:-1;;5000:3:1;5186;5269:1;5265:14;;;5250:30;;5246:39;;;5205:18;;;;5304:4;5331:15;;;-1:-1:-1;5374:971:1;5388:6;5385:1;5382:13;5374:971;;;5481:3;5477:8;5465:9;5457:6;5453:22;5449:37;5444:3;5437:50;5516:6;5510:13;5546:4;5584:2;5578:9;5570:6;5563:25;5635:2;5631;5627:11;5621:18;5676:2;5671;5663:6;5659:15;5652:27;5714:12;5708:19;5764:8;5759:2;5751:6;5747:15;5740:33;5786:71;5848:8;5843:2;5835:6;5831:15;5826:2;5812:12;5808:21;5786:71;:::i;:::-;5880:4;5927:11;;;5921:18;5904:15;;;5897:43;5963:4;6010:11;;;6004:18;5987:15;;;5980:43;6046:4;6093:11;;;6087:18;6070:15;;;6063:43;6129:4;6176:11;;;6170:18;6153:15;;;6146:43;;;;-1:-1:-1;;6255:2:1;6232:17;-1:-1:-1;;6228:31:1;6216:44;;;6212:53;;;6323:12;;;;6288:15;;;;5410:1;5403:9;5374:971;;;5378:3;;6362:6;6354:14;;6377:46;6419:2;6408:9;6404:18;6396:6;-1:-1:-1;;;;;3440:31:1;3428:44;;3374:104;6377:46;;;;;;6432:48;6474:4;6463:9;6459:20;6451:6;-1:-1:-1;;;;;3440:31:1;3428:44;;3374:104;6432:48;3572:12;;3565:20;3558:28;6540:4;6525:20;;;3546:41;;;;3636:4;3625:16;;3619:23;3603:14;;;3596:47;3692:4;3681:16;;3675:23;3659:14;;;3652:47;3737:16;;3731:23;3715:14;;;3708:47;6489:57;3483:278;7876:404;8078:2;8060:21;;;8117:2;8097:18;;;8090:30;8156:34;8151:2;8136:18;;8129:62;-1:-1:-1;;;8222:2:1;8207:18;;8200:38;8270:3;8255:19;;7876:404::o;9221:275::-;9292:2;9286:9;9357:2;9338:13;;-1:-1:-1;;9334:27:1;9322:40;;9392:18;9377:34;;9413:22;;;9374:62;9371:88;;;9439:18;;:::i;:::-;9475:2;9468:22;9221:275;;-1:-1:-1;9221:275:1:o;9501:186::-;9549:4;9582:18;9574:6;9571:30;9568:56;;;9604:18;;:::i;:::-;-1:-1:-1;9670:2:1;9649:15;-1:-1:-1;;9645:29:1;9676:4;9641:40;;9501:186::o;9692:128::-;9732:3;9763:1;9759:6;9756:1;9753:13;9750:39;;;9769:18;;:::i;:::-;-1:-1:-1;9805:9:1;;9692:128::o;9825:120::-;9865:1;9891;9881:35;;9896:18;;:::i;:::-;-1:-1:-1;9930:9:1;;9825:120::o;9950:168::-;9990:7;10056:1;10052;10048:6;10044:14;10041:1;10038:21;10033:1;10026:9;10019:17;10015:45;10012:71;;;10063:18;;:::i;:::-;-1:-1:-1;10103:9:1;;9950:168::o;10123:125::-;10163:4;10191:1;10188;10185:8;10182:34;;;10196:18;;:::i;:::-;-1:-1:-1;10233:9:1;;10123:125::o;10253:258::-;10325:1;10335:113;10349:6;10346:1;10343:13;10335:113;;;10425:11;;;10419:18;10406:11;;;10399:39;10371:2;10364:10;10335:113;;;10466:6;10463:1;10460:13;10457:48;;;-1:-1:-1;;10501:1:1;10483:16;;10476:27;10253:258::o;10516:135::-;10555:3;-1:-1:-1;;10576:17:1;;10573:43;;;10596:18;;:::i;:::-;-1:-1:-1;10643:1:1;10632:13;;10516:135::o;10656:112::-;10688:1;10714;10704:35;;10719:18;;:::i;:::-;-1:-1:-1;10753:9:1;;10656:112::o;10773:127::-;10834:10;10829:3;10825:20;10822:1;10815:31;10865:4;10862:1;10855:15;10889:4;10886:1;10879:15;10905:127;10966:10;10961:3;10957:20;10954:1;10947:31;10997:4;10994:1;10987:15;11021:4;11018:1;11011:15;11037:127;11098:10;11093:3;11089:20;11086:1;11079:31;11129:4;11126:1;11119:15;11153:4;11150:1;11143:15;11169:127;11230:10;11225:3;11221:20;11218:1;11211:31;11261:4;11258:1;11251:15;11285:4;11282:1;11275:15;11301:127;11362:10;11357:3;11353:20;11350:1;11343:31;11393:4;11390:1;11383:15;11417:4;11414:1;11407:15;11433:131;-1:-1:-1;;;;;11508:31:1;;11498:42;;11488:70;;11554:1;11551;11544:12;11488:70;11433:131;:::o;11569:118::-;11655:5;11648:13;11641:21;11634:5;11631:32;11621:60;;11677:1;11674;11667:12

Swarm Source

ipfs://9e372afec0d8b599c9eac49b92680906323202ca49e850c0b4e2cc1524ff8e8b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.