ETH Price: $2,186.74 (+3.64%)

Contract

0xF017E92711c372C1dB57e0621bdCfFFb6d8c77C2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Reward115311502020-12-26 19:14:261529 days ago1609010066IN
0xF017E927...b6d8c77C2
0 ETH0.00673456
Send Reward114855272020-12-19 19:13:121536 days ago1608405192IN
0xF017E927...b6d8c77C2
0 ETH0.0045078630
Deposit114329622020-12-11 17:32:061544 days ago1607707926IN
0xF017E927...b6d8c77C2
0 ETH0.0138128889

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xE7e21475...0efCb3bA7
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
pVaultV2

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{ value : amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


contract pVaultV2 {
    using SafeERC20 for IERC20;
    using Address for address;
    using SafeMath for uint256;
    
    struct Reward {
        uint256 amount;
        uint256 timestamp;
        uint256 totalDeposit;
    }

    mapping(address => uint256) public _lastCheckTime;
    mapping(address => uint256) public _rewardBalance;
    mapping(address => uint256) public _depositBalances;

    uint256 public _totalDeposit;

    Reward[] public _rewards;

    string public _vaultName;
    IERC20 public token0;
    IERC20 public token1;
    address public feeAddress;
    address public vaultAddress;
    uint32 public feePermill = 5;
    uint256 public delayDuration = 7 days;
    bool public withdrawable;
    
    address public gov;

    uint256 public _rewardCount;

    event SentReward(uint256 amount);
    event Deposited(address indexed user, uint256 amount);
    event ClaimedReward(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);

    constructor (address _token0, address _token1, address _feeAddress, address _vaultAddress, string memory name) {
        token0 = IERC20(_token0);
        token1 = IERC20(_token1);
        feeAddress = _feeAddress;
        vaultAddress = _vaultAddress;
        _vaultName = name;
        gov = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == gov, "!governance");
        _;
    }

    function setGovernance(address _gov)
        external
        onlyGov
    {
        gov = _gov;
    }

    function setToken0(address _token)
        external
        onlyGov
    {
        token0 = IERC20(_token);
    }

    function setToken1(address _token)
        external
        onlyGov
    {
        token1 = IERC20(_token);
    }

    function setFeeAddress(address _feeAddress)
        external
        onlyGov
    {
        feeAddress = _feeAddress;
    }

    function setVaultAddress(address _vaultAddress)
        external
        onlyGov
    {
        vaultAddress = _vaultAddress;
    }

    function setFeePermill(uint32 _feePermill)
        external
        onlyGov
    {
        feePermill = _feePermill;
    }

    function setDelayDuration(uint32 _delayDuration)
        external
        onlyGov
    {
        delayDuration = _delayDuration;
    }

    function setWithdrawable(bool _withdrawable)
        external
        onlyGov
    {
        withdrawable = _withdrawable;
    }

    function setVaultName(string memory name)
        external
        onlyGov
    {
        _vaultName = name;
    }

    function balance0()
        external
        view
        returns (uint256)
    {
        return token0.balanceOf(address(this));
    }

    function balance1()
        external
        view
        returns (uint256)
    {
        return token1.balanceOf(address(this));
    }

    function getReward(address userAddress)
        internal
    {
        uint256 lastCheckTime = _lastCheckTime[userAddress];
        uint256 rewardBalance = _rewardBalance[userAddress];
        if (lastCheckTime > 0 && _rewards.length > 0) {
            for (uint i = _rewards.length - 1; lastCheckTime < _rewards[i].timestamp; i--) {
                rewardBalance = rewardBalance.add(_rewards[i].amount.mul(_depositBalances[userAddress]).div(_rewards[i].totalDeposit));
                if (i == 0) break;
            }
        }
        _rewardBalance[userAddress] = rewardBalance;
        _lastCheckTime[msg.sender] = block.timestamp;
    }

    function deposit(uint256 amount) external {
        getReward(msg.sender);

        uint256 feeAmount = amount.mul(feePermill).div(1000);
        uint256 realAmount = amount.sub(feeAmount);
        
        if (feeAmount > 0) {
            token0.safeTransferFrom(msg.sender, feeAddress, feeAmount);
        }
        if (realAmount > 0) {
            token0.safeTransferFrom(msg.sender, vaultAddress, realAmount);
            _depositBalances[msg.sender] = _depositBalances[msg.sender].add(realAmount);
            _totalDeposit = _totalDeposit.add(realAmount);
            emit Deposited(msg.sender, realAmount);
        }
    }

    function withdraw(uint256 amount) external {
        require(token0.balanceOf(address(this)) > 0, "no withdraw amount");
        require(withdrawable, "not withdrawable");
        getReward(msg.sender);

        if (amount > _depositBalances[msg.sender]) {
            amount = _depositBalances[msg.sender];
        }

        require(amount > 0, "can't withdraw 0");

        token0.safeTransfer(msg.sender, amount);

        _depositBalances[msg.sender] = _depositBalances[msg.sender].sub(amount);
        _totalDeposit = _totalDeposit.sub(amount);

        emit Withdrawn(msg.sender, amount);
    }

    function sendReward(uint256 amount) external {
        require(amount > 0, "can't reward 0");
        require(_totalDeposit > 0, "totalDeposit must bigger than 0");
        token1.safeTransferFrom(msg.sender, address(this), amount);

        Reward memory reward;
        reward = Reward(amount, block.timestamp, _totalDeposit);
        _rewards.push(reward);
        emit SentReward(amount);
    }

    function claimReward(uint256 amount) external {
        getReward(msg.sender);

        uint256 rewardLimit = getRewardAmount(msg.sender);

        if (amount > rewardLimit) {
            amount = rewardLimit;
        }
        _rewardBalance[msg.sender] = _rewardBalance[msg.sender].sub(amount);
        token1.safeTransfer(msg.sender, amount);
    }

    function claimRewardAll() external {
        getReward(msg.sender);
        
        uint256 rewardLimit = getRewardAmount(msg.sender);
        
        _rewardBalance[msg.sender] = _rewardBalance[msg.sender].sub(rewardLimit);
        token1.safeTransfer(msg.sender, rewardLimit);
    }
    
    function getRewardAmount(address userAddress) public view returns (uint256) {
        uint256 lastCheckTime = _lastCheckTime[userAddress];
        uint256 rewardBalance = _rewardBalance[userAddress];
        if (_rewards.length > 0) {
            if (lastCheckTime > 0) {
                for (uint i = _rewards.length - 1; lastCheckTime < _rewards[i].timestamp; i--) {
                    rewardBalance = rewardBalance.add(_rewards[i].amount.mul(_depositBalances[userAddress]).div(_rewards[i].totalDeposit));
                    if (i == 0) break;
                }
            }
            
            for (uint j = _rewards.length - 1; block.timestamp < _rewards[j].timestamp.add(delayDuration); j--) {
                uint256 timedAmount = _rewards[j].amount.mul(_depositBalances[userAddress]).div(_rewards[j].totalDeposit);
                timedAmount = timedAmount.mul(_rewards[j].timestamp.add(delayDuration).sub(block.timestamp)).div(delayDuration);
                rewardBalance = rewardBalance.sub(timedAmount);
                if (j == 0) break;
            }
        }
        return rewardBalance;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"address","name":"_vaultAddress","type":"address"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimedReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SentReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_depositBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastCheckTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_rewards","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"totalDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_vaultName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewardAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePermill","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_delayDuration","type":"uint32"}],"name":"setDelayDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_feePermill","type":"uint32"}],"name":"setFeePermill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken0","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultAddress","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"setVaultName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_withdrawable","type":"bool"}],"name":"setWithdrawable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063adc3b31b1161010f578063c6e426bd116100a2578063d86e1ef711610071578063d86e1ef714610579578063e2aa2a851461059c578063e4186aa6146105a4578063fab980b7146105ca576101f0565b8063c6e426bd1461050f578063c78b6dea14610535578063cbeb7ef214610552578063d21220a714610571576101f0565b8063b79ea884116100de578063b79ea884146104b6578063b8f6e841146104dc578063b8f79288146104e4578063c45c4f5814610507576101f0565b8063adc3b31b1461044e578063ae169a5014610474578063b5984a3614610491578063b6b55f2514610499576101f0565b806344264d3d1161018757806385535cc51161015657806385535cc5146103a15780638705fcd4146103c75780638f1e9405146103ed578063ab033ea914610428576101f0565b806344264d3d1461033657806344a040f514610357578063501883011461037d578063637830ca14610399576101f0565b806327b5b6a0116101c357806327b5b6a0146102e35780632e1a7d4d146103095780634127535814610326578063430bf08a1461032e576101f0565b80630dfe1681146101f557806311cc66b21461021957806312d43a51146102c15780631c69ad00146102c9575b600080fd5b6101fd610647565b604080516001600160a01b039092168252519081900360200190f35b6102bf6004803603602081101561022f57600080fd5b81019060208101813564010000000081111561024a57600080fd5b82018360208201111561025c57600080fd5b8035906020019184600183028401116401000000008311171561027e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610656945050505050565b005b6101fd6106bf565b6102d16106d3565b60408051918252519081900360200190f35b6102d1600480360360208110156102f957600080fd5b50356001600160a01b031661074f565b6102bf6004803603602081101561031f57600080fd5b5035610761565b6101fd61096d565b6101fd61097c565b61033e61098b565b6040805163ffffffff9092168252519081900360200190f35b6102d16004803603602081101561036d57600080fd5b50356001600160a01b031661099e565b610385610b41565b604080519115158252519081900360200190f35b6102bf610b4a565b6102bf600480360360208110156103b757600080fd5b50356001600160a01b0316610baa565b6102bf600480360360208110156103dd57600080fd5b50356001600160a01b0316610c1e565b61040a6004803603602081101561040357600080fd5b5035610c92565b60408051938452602084019290925282820152519081900360600190f35b6102bf6004803603602081101561043e57600080fd5b50356001600160a01b0316610cc5565b6102d16004803603602081101561046457600080fd5b50356001600160a01b0316610d3f565b6102bf6004803603602081101561048a57600080fd5b5035610d51565b6102d1610db9565b6102bf600480360360208110156104af57600080fd5b5035610dbf565b6102bf600480360360208110156104cc57600080fd5b50356001600160a01b0316610ec2565b6102d1610f36565b6102bf600480360360208110156104fa57600080fd5b503563ffffffff16610f3c565b6102d1610fb4565b6102bf6004803603602081101561052557600080fd5b50356001600160a01b0316610fff565b6102bf6004803603602081101561054b57600080fd5b5035611073565b6102bf6004803603602081101561056857600080fd5b50351515611214565b6101fd611279565b6102bf6004803603602081101561058f57600080fd5b503563ffffffff16611288565b6102d16112e5565b6102d1600480360360208110156105ba57600080fd5b50356001600160a01b03166112eb565b6105d26112fd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561060c5781810151838201526020016105f4565b50505050905090810190601f1680156106395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6006546001600160a01b031681565b600b5461010090046001600160a01b031633146106a8576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b80516106bb906005906020840190611975565b5050565b600b5461010090046001600160a01b031681565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561071e57600080fd5b505afa158015610732573d6000803e3d6000fd5b505050506040513d602081101561074857600080fd5b5051905090565b60006020819052908152604090205481565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107ac57600080fd5b505afa1580156107c0573d6000803e3d6000fd5b505050506040513d60208110156107d657600080fd5b50511161081f576040805162461bcd60e51b81526020600482015260126024820152711b9bc81dda5d1a191c985dc8185b5bdd5b9d60721b604482015290519081900360640190fd5b600b5460ff16610869576040805162461bcd60e51b815260206004820152601060248201526f6e6f7420776974686472617761626c6560801b604482015290519081900360640190fd5b6108723361138b565b3360009081526002602052604090205481111561089b5750336000908152600260205260409020545b600081116108e3576040805162461bcd60e51b815260206004820152601060248201526f063616e277420776974686472617720360841b604482015290519081900360640190fd5b6006546108fa906001600160a01b03163383611493565b3360009081526002602052604090205461091490826114e5565b3360009081526002602052604090205560035461093190826114e5565b60035560408051828152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a250565b6008546001600160a01b031681565b6009546001600160a01b031681565b600954600160a01b900463ffffffff1681565b6001600160a01b03811660009081526020818152604080832054600190925282205460045415610b3a578115610a9257600454600019015b600481815481106109e357fe5b906000526020600020906003020160010154831015610a9057610a7b610a7460048381548110610a0f57fe5b906000526020600020906003020160020154610a6e600260008a6001600160a01b03166001600160a01b031681526020019081526020016000205460048681548110610a5757fe5b600091825260209091206003909102015490611530565b90611589565b83906115cb565b915080610a8757610a90565b600019016109d6565b505b600454600019015b610acd600a5460048381548110610aad57fe5b9060005260206000209060030201600101546115cb90919063ffffffff16565b421015610b38576000610ae660048381548110610a0f57fe5b9050610b15600a54610a6e610b0e42610b08600a5460048981548110610aad57fe5b906114e5565b8490611530565b9050610b2183826114e5565b925081610b2e5750610b38565b5060001901610a9a565b505b9392505050565b600b5460ff1681565b610b533361138b565b6000610b5e3361099e565b33600090815260016020526040902054909150610b7b90826114e5565b33600081815260016020526040902091909155600754610ba7916001600160a01b039091169083611493565b50565b600b5461010090046001600160a01b03163314610bfc576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600b5461010090046001600160a01b03163314610c70576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60048181548110610ca257600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b600b5461010090046001600160a01b03163314610d17576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600b80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60016020526000908152604090205481565b610d5a3361138b565b6000610d653361099e565b905080821115610d73578091505b33600090815260016020526040902054610d8d90836114e5565b336000818152600160205260409020919091556007546106bb916001600160a01b039091169084611493565b600a5481565b610dc83361138b565b600954600090610df2906103e890610a6e90859063ffffffff600160a01b90910481169061153016565b90506000610e0083836114e5565b90508115610e2757600854600654610e27916001600160a01b039182169133911685611625565b8015610ebd57600954600654610e4c916001600160a01b039182169133911684611625565b33600090815260026020526040902054610e6690826115cb565b33600090815260026020526040902055600354610e8390826115cb565b60035560408051828152905133917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4919081900360200190a25b505050565b600b5461010090046001600160a01b03163314610f14576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60035481565b600b5461010090046001600160a01b03163314610f8e576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6009805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561071e57600080fd5b600b5461010090046001600160a01b03163314611051576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600081116110b9576040805162461bcd60e51b815260206004820152600e60248201526d063616e27742072657761726420360941b604482015290519081900360640190fd5b600060035411611110576040805162461bcd60e51b815260206004820152601f60248201527f746f74616c4465706f736974206d75737420626967676572207468616e203000604482015290519081900360640190fd5b600754611128906001600160a01b0316333084611625565b611130611a01565b50604080516060810182528281524260208083019182526003805484860190815260048054600181018255600091909152855192027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b81019290925592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d909201919091558251848152925191927feae918ad14bd0bcaa9f9d22da2b810c02f44331bf6004a76f049a3360891f916929081900390910190a15050565b600b5461010090046001600160a01b03163314611266576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600b805460ff1916911515919091179055565b6007546001600160a01b031681565b600b5461010090046001600160a01b031633146112da576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b63ffffffff16600a55565b600c5481565b60026020526000908152604090205481565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113835780601f1061135857610100808354040283529160200191611383565b820191906000526020600020905b81548152906001019060200180831161136657829003601f168201915b505050505081565b6001600160a01b0381166000908152602081815260408083205460019092529091205481158015906113be575060045415155b1561146357600454600019015b600481815481106113d857fe5b9060005260206000209060030201600101548310156114615761144c610a746004838154811061140457fe5b906000526020600020906003020160020154610a6e60026000896001600160a01b03166001600160a01b031681526020019081526020016000205460048681548110610a5757fe5b91508061145857611461565b600019016113cb565b505b6001600160a01b039092166000908152600160209081526040808320949094553382528190529190912042905550565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ebd908490611685565b600061152783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061183d565b90505b92915050565b60008261153f5750600061152a565b8282028284828161154c57fe5b04146115275760405162461bcd60e51b8152600401808060200182810382526021815260200180611a386021913960400191505060405180910390fd5b600061152783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118d4565b600082820183811015611527576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261167f908590611685565b50505050565b611697826001600160a01b0316611939565b6116e8576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106117265780518252601f199092019160209182019101611707565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611788576040519150601f19603f3d011682016040523d82523d6000602084013e61178d565b606091505b5091509150816117e4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561167f5780806020019051602081101561180057600080fd5b505161167f5760405162461bcd60e51b815260040180806020018281038252602a815260200180611a59602a913960400191505060405180910390fd5b600081848411156118cc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611891578181015183820152602001611879565b50505050905090810190601f1680156118be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836119235760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611891578181015183820152602001611879565b50600083858161192f57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061196d5750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826119ab57600085556119f1565b82601f106119c457805160ff19168380011785556119f1565b828001600101855582156119f1579182015b828111156119f15782518255916020019190600101906119d6565b506119fd929150611a22565b5090565b60405180606001604052806000815260200160008152602001600081525090565b5b808211156119fd5760008155600101611a2356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e73f50c87f41747254a3abcf8ee6e0e7ca53ebca5aba193ed436370f6d5ce37964736f6c63430007050033

Deployed Bytecode Sourcemap

5254:7120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:20;;;:::i;:::-;;;;-1:-1:-1;;;;;5770:20:0;;;;;;;;;;;;;;7781:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7781:118:0;;-1:-1:-1;7781:118:0;;-1:-1:-1;;;;;7781:118:0:i;:::-;;6006:18;;;:::i;7907:141::-;;;:::i;:::-;;;;;;;;;;;;;;;;5497:49;;;;;;;;;;;;;;;;-1:-1:-1;5497:49:0;-1:-1:-1;;;;;5497:49:0;;:::i;9520:618::-;;;;;;;;;;;;;;;;-1:-1:-1;9520:618:0;;:::i;5824:25::-;;;:::i;5856:27::-;;;:::i;5890:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11235:1136;;;;;;;;;;;;;;;;-1:-1:-1;11235:1136:0;-1:-1:-1;;;;;11235:1136:0;;:::i;5969:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;10930:293;;;:::i;7218:135::-;;;;;;;;;;;;;;;;-1:-1:-1;7218:135:0;-1:-1:-1;;;;;7218:135:0;;:::i;7083:127::-;;;;;;;;;;;;;;;;-1:-1:-1;7083:127:0;-1:-1:-1;;;;;7083:127:0;;:::i;5706:24::-;;;;;;;;;;;;;;;;-1:-1:-1;5706:24:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6719:106;;;;;;;;;;;;;;;;-1:-1:-1;6719:106:0;-1:-1:-1;;;;;6719:106:0;;:::i;5553:49::-;;;;;;;;;;;;;;;;-1:-1:-1;5553:49:0;-1:-1:-1;;;;;5553:49:0;;:::i;10561:361::-;;;;;;;;;;;;;;;;-1:-1:-1;10561:361:0;;:::i;5925:37::-;;;:::i;8867:645::-;;;;;;;;;;;;;;;;-1:-1:-1;8867:645:0;;:::i;6958:117::-;;;;;;;;;;;;;;;;-1:-1:-1;6958:117:0;-1:-1:-1;;;;;6958:117:0;;:::i;5669:28::-;;;:::i;7361:126::-;;;;;;;;;;;;;;;;-1:-1:-1;7361:126:0;;;;:::i;8056:141::-;;;:::i;6833:117::-;;;;;;;;;;;;;;;;-1:-1:-1;6833:117:0;-1:-1:-1;;;;;6833:117:0;;:::i;10146:407::-;;;;;;;;;;;;;;;;-1:-1:-1;10146:407:0;;:::i;7641:132::-;;;;;;;;;;;;;;;;-1:-1:-1;7641:132:0;;;;:::i;5797:20::-;;;:::i;7495:138::-;;;;;;;;;;;;;;;;-1:-1:-1;7495:138:0;;;;:::i;6033:27::-;;;:::i;5609:51::-;;;;;;;;;;;;;;;;-1:-1:-1;5609:51:0;-1:-1:-1;;;;;5609:51:0;;:::i;5739:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:20;;;-1:-1:-1;;;;;5770:20:0;;:::o;7781:118::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7874:17;;::::1;::::0;:10:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;7781:118:::0;:::o;6006:18::-;;;;;;-1:-1:-1;;;;;6006:18:0;;:::o;7907:141::-;8009:6;;:31;;;-1:-1:-1;;;8009:31:0;;8034:4;8009:31;;;;;;7977:7;;-1:-1:-1;;;;;8009:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8009:31:0;;-1:-1:-1;7907:141:0;:::o;5497:49::-;;;;;;;;;;;;;;:::o;9520:618::-;9582:6;;:31;;;-1:-1:-1;;;9582:31:0;;9607:4;9582:31;;;;;;9616:1;;-1:-1:-1;;;;;9582:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9582:31:0;:35;9574:66;;;;;-1:-1:-1;;;9574:66:0;;;;;;;;;;;;-1:-1:-1;;;9574:66:0;;;;;;;;;;;;;;;9659:12;;;;9651:41;;;;;-1:-1:-1;;;9651:41:0;;;;;;;;;;;;-1:-1:-1;;;9651:41:0;;;;;;;;;;;;;;;9703:21;9713:10;9703:9;:21::i;:::-;9767:10;9750:28;;;;:16;:28;;;;;;9741:37;;9737:107;;;-1:-1:-1;9821:10:0;9804:28;;;;:16;:28;;;;;;9737:107;9873:1;9864:6;:10;9856:39;;;;;-1:-1:-1;;;9856:39:0;;;;;;;;;;;;-1:-1:-1;;;9856:39:0;;;;;;;;;;;;;;;9908:6;;:39;;-1:-1:-1;;;;;9908:6:0;9928:10;9940:6;9908:19;:39::i;:::-;10008:10;9991:28;;;;:16;:28;;;;;;:40;;10024:6;9991:32;:40::i;:::-;9977:10;9960:28;;;;:16;:28;;;;;:71;10058:13;;:25;;10076:6;10058:17;:25::i;:::-;10042:13;:41;10101:29;;;;;;;;10111:10;;10101:29;;;;;;;;;;9520:618;:::o;5824:25::-;;;-1:-1:-1;;;;;5824:25:0;;:::o;5856:27::-;;;-1:-1:-1;;;;;5856:27:0;;:::o;5890:28::-;;;-1:-1:-1;;;5890:28:0;;;;;:::o;11235:1136::-;-1:-1:-1;;;;;11346:27:0;;11302:7;11346:27;;;;;;;;;;;;11408:14;:27;;;;;;11450:8;:15;:19;11446:887;;11490:17;;11486:337;;11542:8;:15;-1:-1:-1;;11542:19:0;11528:280;11579:8;11588:1;11579:11;;;;;;;;;;;;;;;;;;:21;;;11563:13;:37;11528:280;;;11646:102;11664:83;11722:8;11731:1;11722:11;;;;;;;;;;;;;;;;;;:24;;;11664:53;11687:16;:29;11704:11;-1:-1:-1;;;;;11687:29:0;-1:-1:-1;;;;;11687:29:0;;;;;;;;;;;;;11664:8;11673:1;11664:11;;;;;;;;;;;;;;;;;;;;;:18;;:22;:53::i;:::-;:57;;:83::i;:::-;11646:13;;:17;:102::i;:::-;11630:118;-1:-1:-1;11775:6:0;11771:17;;11783:5;;11771:17;-1:-1:-1;;11602:3:0;11528:280;;;;11486:337;11865:8;:15;-1:-1:-1;;11865:19:0;11851:471;11904:40;11930:13;;11904:8;11913:1;11904:11;;;;;;;;;;;;;;;;;;:21;;;:25;;:40;;;;:::i;:::-;11886:15;:58;11851:471;;;11970:19;11992:83;12050:8;12059:1;12050:11;;;;;;;11992:83;11970:105;;12108:97;12191:13;;12108:78;12124:61;12169:15;12124:40;12150:13;;12124:8;12133:1;12124:11;;;;;;;:40;:44;;:61::i;:::-;12108:11;;:15;:78::i;:97::-;12094:111;-1:-1:-1;12240:30:0;:13;12094:111;12240:17;:30::i;:::-;12224:46;-1:-1:-1;12293:6:0;12289:17;;12301:5;;;12289:17;-1:-1:-1;;;11946:3:0;11851:471;;;;11446:887;12350:13;11235:1136;-1:-1:-1;;;11235:1136:0:o;5969:24::-;;;;;;:::o;10930:293::-;10976:21;10986:10;10976:9;:21::i;:::-;11018:19;11040:27;11056:10;11040:15;:27::i;:::-;11132:10;11117:26;;;;:14;:26;;;;;;11018:49;;-1:-1:-1;11117:43:0;;11018:49;11117:30;:43::i;:::-;11103:10;11088:26;;;;:14;:26;;;;;:72;;;;11171:6;;:44;;-1:-1:-1;;;;;11171:6:0;;;;11203:11;11171:19;:44::i;:::-;10930:293;:::o;7218:135::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7317:12:::1;:28:::0;;-1:-1:-1;;;;;;7317:28:0::1;-1:-1:-1::0;;;;;7317:28:0;;;::::1;::::0;;;::::1;::::0;;7218:135::o;7083:127::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7178:10:::1;:24:::0;;-1:-1:-1;;;;;;7178:24:0::1;-1:-1:-1::0;;;;;7178:24:0;;;::::1;::::0;;;::::1;::::0;;7083:127::o;5706:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5706:24:0;:::o;6719:106::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;6807:3:::1;:10:::0;;-1:-1:-1;;;;;6807:10:0;;::::1;;;-1:-1:-1::0;;;;;;6807:10:0;;::::1;::::0;;;::::1;::::0;;6719:106::o;5553:49::-;;;;;;;;;;;;;:::o;10561:361::-;10618:21;10628:10;10618:9;:21::i;:::-;10652:19;10674:27;10690:10;10674:15;:27::i;:::-;10652:49;;10727:11;10718:6;:20;10714:73;;;10764:11;10755:20;;10714:73;10841:10;10826:26;;;;:14;:26;;;;;;:38;;10857:6;10826:30;:38::i;:::-;10812:10;10797:26;;;;:14;:26;;;;;:67;;;;10875:6;;:39;;-1:-1:-1;;;;;10875:6:0;;;;10907;10875:19;:39::i;5925:37::-;;;;:::o;8867:645::-;8920:21;8930:10;8920:9;:21::i;:::-;8985:10;;8954:17;;8974:32;;9001:4;;8974:22;;:6;;8985:10;-1:-1:-1;;;8985:10:0;;;;;;8974;:22;:::i;:32::-;8954:52;-1:-1:-1;9017:18:0;9038:21;:6;8954:52;9038:10;:21::i;:::-;9017:42;-1:-1:-1;9084:13:0;;9080:104;;9150:10;;9114:6;;:58;;-1:-1:-1;;;;;9114:6:0;;;;9138:10;;9150;9162:9;9114:23;:58::i;:::-;9198:14;;9194:311;;9265:12;;9229:6;;:61;;-1:-1:-1;;;;;9229:6:0;;;;9253:10;;9265:12;9279:10;9229:23;:61::i;:::-;9353:10;9336:28;;;;:16;:28;;;;;;:44;;9369:10;9336:32;:44::i;:::-;9322:10;9305:28;;;;:16;:28;;;;;:75;9411:13;;:29;;9429:10;9411:17;:29::i;:::-;9395:13;:45;9460:33;;;;;;;;9470:10;;9460:33;;;;;;;;;;9194:311;8867:645;;;:::o;6958:117::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7044:6:::1;:23:::0;;-1:-1:-1;;;;;;7044:23:0::1;-1:-1:-1::0;;;;;7044:23:0;;;::::1;::::0;;;::::1;::::0;;6958:117::o;5669:28::-;;;;:::o;7361:126::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7455:10:::1;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;7455:24:0::1;-1:-1:-1::0;;;;7455:24:0;;::::1;::::0;;;::::1;::::0;;7361:126::o;8056:141::-;8158:6;;:31;;;-1:-1:-1;;;8158:31:0;;8183:4;8158:31;;;;;;8126:7;;-1:-1:-1;;;;;8158:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;6833:117;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;6919:6:::1;:23:::0;;-1:-1:-1;;;;;;6919:23:0::1;-1:-1:-1::0;;;;;6919:23:0;;;::::1;::::0;;;::::1;::::0;;6833:117::o;10146:407::-;10219:1;10210:6;:10;10202:37;;;;;-1:-1:-1;;;10202:37:0;;;;;;;;;;;;-1:-1:-1;;;10202:37:0;;;;;;;;;;;;;;;10274:1;10258:13;;:17;10250:61;;;;;-1:-1:-1;;;10250:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10322:6;;:58;;-1:-1:-1;;;;;10322:6:0;10346:10;10366:4;10373:6;10322:23;:58::i;:::-;10393:20;;:::i;:::-;-1:-1:-1;10433:46:0;;;;;;;;;;;10448:15;10433:46;;;;;;;10465:13;;;10433:46;;;;;;10490:8;:21;;;;;;;-1:-1:-1;10490:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10527:18;;;;;;;10433:46;;10527:18;;;;;;;;;;;10146:407;;:::o;7641:132::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7737:12:::1;:28:::0;;-1:-1:-1;;7737:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7641:132::o;5797:20::-;;;-1:-1:-1;;;;;5797:20:0;;:::o;7495:138::-;6672:3;;;;;-1:-1:-1;;;;;6672:3:0;6658:10;:17;6650:41;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;-1:-1:-1;;;6650:41:0;;;;;;;;;;;;;;;7595:30:::1;;:13;:30:::0;7495:138::o;6033:27::-;;;;:::o;5609:51::-;;;;;;;;;;;;;:::o;5739:24::-;;;;;;;;;;;;;;;-1:-1:-1;;5739:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8205:654::-;-1:-1:-1;;;;;8303:27:0;;8279:21;8303:27;;;;;;;;;;;;8365:14;:27;;;;;;;8407:17;;;;;:40;;-1:-1:-1;8428:8:0;:15;:19;;8407:40;8403:340;;;8478:8;:15;-1:-1:-1;;8478:19:0;8464:268;8515:8;8524:1;8515:11;;;;;;;;;;;;;;;;;;:21;;;8499:13;:37;8464:268;;;8578:102;8596:83;8654:8;8663:1;8654:11;;;;;;;;;;;;;;;;;;:24;;;8596:53;8619:16;:29;8636:11;-1:-1:-1;;;;;8619:29:0;-1:-1:-1;;;;;8619:29:0;;;;;;;;;;;;;8596:8;8605:1;8596:11;;;;;;;8578:102;8562:118;-1:-1:-1;8703:6:0;8699:17;;8711:5;;8699:17;-1:-1:-1;;8538:3:0;8464:268;;;;8403:340;-1:-1:-1;;;;;8753:27:0;;;;;;;:14;:27;;;;;;;;:43;;;;8822:10;8807:26;;;;;;;;;8836:15;8807:44;;-1:-1:-1;8205:654:0:o;3267:176::-;3376:58;;;-1:-1:-1;;;;;3376:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3376:58:0;-1:-1:-1;;;3376:58:0;;;3350:85;;3369:5;;3350:18;:85::i;950:136::-;1008:7;1035:43;1039:1;1042;1035:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1028:50;;950:136;;;;;:::o;1290:250::-;1348:7;1372:6;1368:47;;-1:-1:-1;1402:1:0;1395:8;;1368:47;1439:5;;;1443:1;1439;:5;:1;1463:5;;;;;:10;1455:56;;;;-1:-1:-1;;;1455:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:132;1604:7;1631:39;1635:1;1638;1631:39;;;;;;;;;;;;;;;;;:3;:39::i;763:181::-;821:7;853:5;;;877:6;;;;869:46;;;;;-1:-1:-1;;;869:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3451:204;3578:68;;;-1:-1:-1;;;;;3578:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3578:68:0;-1:-1:-1;;;3578:68:0;;;3552:95;;3571:5;;3552:18;:95::i;:::-;3451:204;;;;:::o;4647:598::-;4735:27;4743:5;-1:-1:-1;;;;;4735:25:0;;:27::i;:::-;4727:71;;;;;-1:-1:-1;;;4727:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4872:12;4886:23;4921:5;-1:-1:-1;;;;;4913:19:0;4933:4;4913:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4913:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4871:67;;;;4957:7;4949:52;;;;;-1:-1:-1;;;4949:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5018:17;;:21;5014:224;;5160:10;5149:30;;;;;;;;;;;;;;;-1:-1:-1;5149:30:0;5141:85;;;;-1:-1:-1;;;5141:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1092:192;1178:7;1214:12;1206:6;;;;1198:29;;;;-1:-1:-1;;;1198:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1250:5:0;;;1092:192::o;1684:258::-;1770:7;1872:12;1865:5;1857:28;;;;-1:-1:-1;;;1857:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1896:9;1912:1;1908;:5;;;;;;;1684:258;-1:-1:-1;;;;;1684:258:0:o;2280:374::-;2340:4;2563:20;;2406:66;2603:15;;;;;:42;;;2634:11;2622:8;:23;;2603:42;2595:51;2280:374;-1:-1:-1;;;;2280:374:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://e73f50c87f41747254a3abcf8ee6e0e7ca53ebca5aba193ed436370f6d5ce379

Block Transaction Difficulty 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
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.