ETH Price: $2,521.06 (-5.04%)

Contract

0xe6771368054b204729E0812b38672659f914F94b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Reward160995492022-12-02 20:35:59698 days ago1670013359IN
0xe6771368...9f914F94b
0 ETH0.0008433313.03776085
Claim Reward160995482022-12-02 20:35:47698 days ago1670013347IN
0xe6771368...9f914F94b
0 ETH0.0010363512.67184435
Claim Reward160995472022-12-02 20:35:35698 days ago1670013335IN
0xe6771368...9f914F94b
0 ETH0.0008466113.0885461
Claim Reward160995462022-12-02 20:35:23698 days ago1670013323IN
0xe6771368...9f914F94b
0 ETH0.0008108312.53525519
Claim Reward160995442022-12-02 20:34:59698 days ago1670013299IN
0xe6771368...9f914F94b
0 ETH0.0011050113.51143463
Claim Reward160995432022-12-02 20:34:47698 days ago1670013287IN
0xe6771368...9f914F94b
0 ETH0.000867113.4052036
Claim Reward160995422022-12-02 20:34:35698 days ago1670013275IN
0xe6771368...9f914F94b
0 ETH0.0005777314.14528291
Claim Reward160995422022-12-02 20:34:35698 days ago1670013275IN
0xe6771368...9f914F94b
0 ETH0.0009149714.14528291
Claim Reward160995412022-12-02 20:34:23698 days ago1670013263IN
0xe6771368...9f914F94b
0 ETH0.0008993513.90376656
Claim Reward160995402022-12-02 20:34:11698 days ago1670013251IN
0xe6771368...9f914F94b
0 ETH0.0008559613.23298229
Claim Reward160995392022-12-02 20:33:59698 days ago1670013239IN
0xe6771368...9f914F94b
0 ETH0.001125313.75949387
Claim Reward160995382022-12-02 20:33:47698 days ago1670013227IN
0xe6771368...9f914F94b
0 ETH0.001143813.98562644
Claim Reward160995372022-12-02 20:33:35698 days ago1670013215IN
0xe6771368...9f914F94b
0 ETH0.0013768813.92428369
Claim Reward160995282022-12-02 20:31:47698 days ago1670013107IN
0xe6771368...9f914F94b
0 ETH0.0011378117.59039062
Claim Reward160995272022-12-02 20:31:35698 days ago1670013095IN
0xe6771368...9f914F94b
0 ETH0.0012028718.59612158
Claim Reward160995262022-12-02 20:31:23698 days ago1670013083IN
0xe6771368...9f914F94b
0 ETH0.0010947716.92491844
Claim Reward160995262022-12-02 20:31:23698 days ago1670013083IN
0xe6771368...9f914F94b
0 ETH0.0010947716.92491844
Claim Reward160995192022-12-02 20:29:59698 days ago1670012999IN
0xe6771368...9f914F94b
0 ETH0.001020115.77064159
Claim Reward160995182022-12-02 20:29:47698 days ago1670012987IN
0xe6771368...9f914F94b
0 ETH0.0011575714.15403443
Claim Reward160995182022-12-02 20:29:47698 days ago1670012987IN
0xe6771368...9f914F94b
0 ETH0.0009155314.15403443
Claim Reward160995152022-12-02 20:29:11698 days ago1670012951IN
0xe6771368...9f914F94b
0 ETH0.0005481613.42119592
Claim Reward160995142022-12-02 20:28:59698 days ago1670012939IN
0xe6771368...9f914F94b
0 ETH0.0005513413.49922211
Claim Reward160995132022-12-02 20:28:47698 days ago1670012927IN
0xe6771368...9f914F94b
0 ETH0.0008618713.32440079
Claim Reward160995132022-12-02 20:28:47698 days ago1670012927IN
0xe6771368...9f914F94b
0 ETH0.0008618713.32440079
Claim Reward160995122022-12-02 20:28:35698 days ago1670012915IN
0xe6771368...9f914F94b
0 ETH0.0008633213.34673325
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BodegaClaim

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-15
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.14;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Returns the number of decimal places
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract Ownable {
    address private owner;

    // event for EVM logging
    event OwnerSet(address indexed oldOwner, address indexed newOwner);

    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == owner, "Caller is not owner");
        _;
    }

    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    /**
     * @dev Return owner address
     * @return address of owner
     */
    function getOwner() external view returns (address) {
        return owner;
    }
}

interface IBodega {
    function allocationClass0() external view returns (uint256);
    function allocationClass1() external view returns (uint256);
    function allocationClass2() external view returns (uint256);

    function totalClass0() external view returns (uint256);
    function totalClass1() external view returns (uint256);
    function totalClass2() external view returns (uint256);

    function ownerOf(uint256 tokenId) external view returns (address);
    function getIDsByOwner(address owner) external view returns (uint256[] memory);
}

interface ITetherSucks {
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external;
    function transfer(address recipient, uint256 amount) external;
}

contract BodegaClaim is Ownable {

    // WETH
    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    // USDT
    address private constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;

    // Bodega NFT contract
    IBodega public constant bodega = IBodega(0x6C208c2785050b5A79aC1e7Bd317d81A2E477837);

    // Mapping from tokenId to reward token to excluded rewards
    mapping( uint256 => mapping ( address => uint256 )) private totalExcluded;

    struct RewardToken {
        uint totalRewards;
        uint dividendsPerNFTClass0;
        uint dividendsPerNFTClass1;
        uint dividendsPerNFTClass2;
    }

    // reward tracking
    mapping ( address => RewardToken ) public rewardToken;

    // constant break points
    uint256 public constant breakPoint0 = 111;
    uint256 public constant breakPoint1 = 1_222;

    function giveRewards(address token, uint256 amount) external {
        uint256 received = _transferIn(token, amount);
        _register(token, received);
    }

    function giveETH() external payable {
        _register(WETH, msg.value);
    }

    function claimRewardsForUser(address token) external {
        _batchClaimRewardsMemory(token, msg.sender, getIDsByOwner(msg.sender));
    }

    function claimRewards(address token, uint256[] calldata tokenIds) external {
        _batchClaimRewards(token, msg.sender, tokenIds);
    }

    function claimReward(address token, uint256 tokenId) external {
        _claimReward(token, tokenId);
    }

    function _register(address token, uint256 amount) internal {
        
        (uint256 c0, uint256 c1, uint256 c2) = divvyRewards(amount);
        uint tot0 = totalClass0();
        uint tot1 = totalClass1();
        uint tot2 = totalClass2();
        unchecked {
            rewardToken[token].totalRewards += amount;
            if (tot0 > 0) {
                rewardToken[token].dividendsPerNFTClass0 += c0 / tot0;
            }
            if (tot1 > 0) {
                rewardToken[token].dividendsPerNFTClass1 += c1 / tot1;
            }
            if (tot2 > 0) {
                rewardToken[token].dividendsPerNFTClass2 += c2 / tot2;
            }
        }
    }

    function _transferIn(address token, uint256 amount) internal returns (uint256) {
        uint256 before = IERC20(token).balanceOf(address(this));
        if (token == USDT) {
            ITetherSucks(token).transferFrom(msg.sender, address(this), amount);
        } else {
            IERC20(token).transferFrom(msg.sender, address(this), amount);   
        }
        uint256 After = IERC20(token).balanceOf(address(this));
        require(After > before, "Zero Received");
        return After - before;
    }

    function _batchClaimRewards(address token, address user, uint256[] calldata tokenIds)
        internal
    {
        uint256 total;
        uint256 len = tokenIds.length;

        for (uint256 i = 0; i < len; ) {
            uint256 ID = tokenIds[i];
            require(bodega.ownerOf(ID) == user, "Not Owner Of TokenID");
            total += pendingRewardsForID(token, ID);
            totalExcluded[ID][token] = getCumulativeDividends(token, ID);
            unchecked {
                ++i;
            }
        }

        // send rewards to user
        _send(token, user, total);
    }

    function _batchClaimRewardsMemory(address token, address user, uint256[] memory tokenIds)
        internal
    {
        uint256 total;
        uint256 len = tokenIds.length;

        for (uint256 i = 0; i < len; ) {
            uint256 ID = tokenIds[i];
            require(bodega.ownerOf(ID) == user, "Not Owner Of TokenID");
            total += pendingRewardsForID(token, ID);
            totalExcluded[ID][token] = getCumulativeDividends(token, ID);
            unchecked {
                ++i;
            }
        }

        // send rewards to user
        _send(token, user, total);
    }

    /**
        Claims Reward For User
     */
    function _claimReward(address token, uint256 tokenId) internal {

        // owner of token id
        address owner = bodega.ownerOf(tokenId);
        require(
            owner != address(0),
            'Zero Owner'
        );

        // fetch pending rewards
        uint256 pending = pendingRewardsForID(token, tokenId);

        // reset total rewards
        totalExcluded[tokenId][token] = getCumulativeDividends(token, tokenId);

        // transfer reward to user
        _send(token, owner, pending);
    }

    function _send(address token, address to, uint256 amount) internal {
        // reward token balance
        uint256 rBal = token == WETH ? address(this).balance : IERC20(token).balanceOf(address(this));
        if (amount > rBal) {
            amount = rBal;
        }

        // return if no rewards
        if (amount == 0) {
            return;
        }

        // require success
        if (token == WETH) {
            (bool s,) = payable(to).call{value: amount}("");
            require(s);
        } else {
            if (token == USDT) {
                ITetherSucks(token).transfer(to, amount);
            } else {
                IERC20(token).transfer(to, amount);
            }
        }
    }

    function divvyRewards(uint256 amount)
        public
        view
        returns (
            uint256 class0,
            uint256 class1,
            uint256 class2
        )
    {
        uint all0 = allocationClass0();
        uint all1 = allocationClass1();
        uint all2 = allocationClass2();
        uint total = all0 + all1 + all2;
        class0 = ( amount * all0 ) / total;
        class1 = ( amount * all1 ) / total;
        class2 = amount - (class0 + class1);
    }

    /**
        Pending Rewards For `tokenId`
     */
    function pendingRewardsForUser(address token, address user)
        external
        view
        returns (uint256 total)
    {
        uint256[] memory tokenIds = getIDsByOwner(user);

        uint256 len = tokenIds.length;
        for (uint256 i = 0; i < len; ) {
            total += pendingRewardsForID(token, tokenIds[i]);
            unchecked {
                ++i;
            }
        }
    }

    /**
        Pending Rewards For `tokenId`
     */
    function pendingRewards(address token, uint256[] calldata tokenIds)
        public
        view
        returns (uint256 total)
    {
        uint256 len = tokenIds.length;
        for (uint256 i = 0; i < len; ) {
            total += pendingRewardsForID(token, tokenIds[i]);
            unchecked {
                ++i;
            }
        }
    }

    /**
        Pending Rewards For `tokenId`
     */
    function pendingRewardsForID(address token, uint256 tokenId)
        public
        view
        returns (uint256)
    {
        uint256 accountTotalDividends = getCumulativeDividends(token, tokenId);
        uint256 accountTotalExcluded = totalExcluded[tokenId][token];

        if (accountTotalDividends <= accountTotalExcluded) {
            return 0;
        }

        return accountTotalDividends - accountTotalExcluded;
    }

    /**
        Cumulative Dividends For A Number Of Tokens
     */
    function getCumulativeDividends(address token, uint256 tokenId)
        internal
        view
        returns (uint256)
    {
        if (tokenId < breakPoint0) {
            return rewardToken[token].dividendsPerNFTClass0;
        } else if (tokenId < breakPoint1) {
            return rewardToken[token].dividendsPerNFTClass1;
        } else {
            return rewardToken[token].dividendsPerNFTClass2;
        }
    }

    function getIDsByOwner(address owner)
        public
        view
        returns (uint256[] memory)
    {
        return bodega.getIDsByOwner(owner);
    }

    function allocationClass0() public view returns (uint256) {
        return bodega.allocationClass0();
    }
    function allocationClass1() public view returns (uint256) {
        return bodega.allocationClass1();
    }
    function allocationClass2() public view returns (uint256) {
        return bodega.allocationClass2();
    }
    function totalClass0() public view returns (uint256) {
        return bodega.totalClass0();
    }
    function totalClass1() public view returns (uint256) {
        return bodega.totalClass1();
    }
    function totalClass2() public view returns (uint256) {
        return bodega.totalClass2();
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"inputs":[],"name":"allocationClass0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocationClass1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocationClass2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bodega","outputs":[{"internalType":"contract IBodega","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breakPoint0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breakPoint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimRewardsForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"divvyRewards","outputs":[{"internalType":"uint256","name":"class0","type":"uint256"},{"internalType":"uint256","name":"class1","type":"uint256"},{"internalType":"uint256","name":"class2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsForID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"pendingRewardsForUser","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardToken","outputs":[{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"dividendsPerNFTClass0","type":"uint256"},{"internalType":"uint256","name":"dividendsPerNFTClass1","type":"uint256"},{"internalType":"uint256","name":"dividendsPerNFTClass2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClass0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClass1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClass2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b0319163390811782556040519091907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36116db8061005f6000396000f3fe6080604052600436106101355760003560e01c8063887c207a116100ab578063b121c95e1161006f578063b121c95e1461033b578063b36444c81461035b578063bc6e82b314610370578063cdef91d014610385578063da7e690c146103e9578063deb849971461041157600080fd5b8063887c207a14610278578063893d20e81461028e5780638d673c94146102c0578063a6f9dae1146102fb578063aea95da61461031b57600080fd5b80635ece6aa1116100fd5780635ece6aa1146101f157806367349ad81461020657806367a594f61461021b5780636ebf9f65146102305780637bc299d61461023857806387a7433b1461025857600080fd5b806305231dea1461013a578063165059291461015c578063174e31c41461018457806337619e76146101a45780635bf244be146101c4575b600080fd5b34801561014657600080fd5b5061015a610155366004611359565b610426565b005b34801561016857600080fd5b50610171610437565b6040519081526020015b60405180910390f35b34801561019057600080fd5b5061015a61019f3660046113e1565b6104b4565b3480156101b057600080fd5b5061015a6101bf36600461140d565b6104c2565b3480156101d057600080fd5b506101e46101df36600461140d565b6104d8565b60405161017b9190611431565b3480156101fd57600080fd5b50610171606f81565b34801561021257600080fd5b50610171610561565b34801561022757600080fd5b506101716105b5565b61015a610609565b34801561024457600080fd5b5061015a6102533660046113e1565b610629565b34801561026457600080fd5b50610171610273366004611359565b610641565b34801561028457600080fd5b506101716104c681565b34801561029a57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161017b565b3480156102cc57600080fd5b506102e06102db366004611475565b61068d565b6040805193845260208401929092529082015260600161017b565b34801561030757600080fd5b5061015a61031636600461140d565b61071c565b34801561032757600080fd5b5061017161033636600461148e565b6107cc565b34801561034757600080fd5b506101716103563660046113e1565b610828565b34801561036757600080fd5b50610171610880565b34801561037c57600080fd5b506101716108d4565b34801561039157600080fd5b506103c96103a036600461140d565b600260208190526000918252604090912080546001820154928201546003909201549092919084565b60408051948552602085019390935291830152606082015260800161017b565b3480156103f557600080fd5b506102a8736c208c2785050b5a79ac1e7bd317d81a2e47783781565b34801561041d57600080fd5b50610171610928565b6104328333848461097c565b505050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663165059296040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af91906114c7565b905090565b6104be8282610ade565b5050565b6104d581336104d0336104d8565b610be6565b50565b604051632df9225f60e11b81526001600160a01b0382166004820152606090736c208c2785050b5a79ac1e7bd317d81a2e47783790635bf244be90602401600060405180830381865afa158015610533573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055b91908101906114f6565b92915050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b03166367349ad86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b03166367a594f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b61062773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc234610d4a565b565b60006106358383610e5f565b90506104328382610d4a565b600081815b818110156106845761067086868684818110610664576106646115b4565b90506020020135610828565b61067a90846115e0565b9250600101610646565b50509392505050565b60008060008061069b610928565b905060006106a76108d4565b905060006106b3610437565b90506000816106c284866115e0565b6106cc91906115e0565b9050806106d9858a6115f8565b6106e3919061162d565b9650806106f0848a6115f8565b6106fa919061162d565b955061070686886115e0565b610710908961164f565b96989597505050505050565b6000546001600160a01b031633146107715760405162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1037bbb732b960691b60448201526064015b60405180910390fd5b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806107d8836104d8565b805190915060005b8181101561081f5761080b868483815181106107fe576107fe6115b4565b6020026020010151610828565b61081590856115e0565b93506001016107e0565b50505092915050565b600080610835848461108d565b60008481526001602090815260408083206001600160a01b038916845290915290205490915080821161086d5760009250505061055b565b610877818361164f565b95945050505050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663b36444c86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663bc6e82b36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663deb849976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b600081815b81811015610aca57600085858381811061099d5761099d6115b4565b905060200201359050866001600160a01b0316736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016109f291815260200190565b602060405180830381865afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611666565b6001600160a01b031614610a805760405162461bcd60e51b8152602060048201526014602482015273139bdd0813dddb995c8813d988151bdad95b925160621b6044820152606401610768565b610a8a8882610828565b610a9490856115e0565b9350610aa0888261108d565b60009182526001602081815260408085206001600160a01b038d1686529091529092205501610981565b50610ad6868684611109565b505050505050565b6040516331a9108f60e11b815260048101829052600090736c208c2785050b5a79ac1e7bd317d81a2e47783790636352211e90602401602060405180830381865afa158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b559190611666565b90506001600160a01b038116610b9a5760405162461bcd60e51b815260206004820152600a6024820152692d32b9379027bbb732b960b11b6044820152606401610768565b6000610ba68484610828565b9050610bb2848461108d565b60008481526001602090815260408083206001600160a01b0389168452909152902055610be0848383611109565b50505050565b8051600090815b81811015610d37576000848281518110610c0957610c096115b4565b60200260200101519050856001600160a01b0316736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b0316636352211e836040518263ffffffff1660e01b8152600401610c5f91815260200190565b602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190611666565b6001600160a01b031614610ced5760405162461bcd60e51b8152602060048201526014602482015273139bdd0813dddb995c8813d988151bdad95b925160621b6044820152606401610768565b610cf78782610828565b610d0190856115e0565b9350610d0d878261108d565b60009182526001602081815260408085206001600160a01b038c1686529091529092205501610bed565b50610d43858584611109565b5050505050565b6000806000610d588461068d565b9250925092506000610d68610880565b90506000610d746105b5565b90506000610d80610561565b6001600160a01b038916600090815260026020526040902080548901905590508215610ddc57828681610db557610db5611617565b6001600160a01b038a16600090815260026020526040902060010180549290910490910190555b8115610e1957818581610df157610df1611617565b6001600160a01b038a1660009081526002602081905260409091200180549290910490910190555b8015610e5557808481610e2e57610e2e611617565b6001600160a01b038a16600090815260026020526040902060030180549290910490910190555b5050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc91906114c7565b905073dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b03851601610f5e576040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd90606401600060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b50505050610fd7565b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190611683565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104291906114c7565b90508181116110835760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610768565b610877828261164f565b6000606f8210156110ba57506001600160a01b03821660009081526002602052604090206001015461055b565b6104c68210156110e757506001600160a01b0382166000908152600260208190526040909120015461055b565b506001600160a01b03821660009081526002602052604090206003015461055b565b60006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21461119c576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119791906114c7565b61119e565b475b9050808211156111ac578091505b816000036111ba5750505050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b03851601611245576000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b505090508061123f57600080fd5b50610be0565b73dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b038516016112d15760405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb90604401600060405180830381600087803b1580156112b457600080fd5b505af11580156112c8573d6000803e3d6000fd5b50505050610be0565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015611320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190611683565b6001600160a01b03811681146104d557600080fd5b60008060006040848603121561136e57600080fd5b833561137981611344565b9250602084013567ffffffffffffffff8082111561139657600080fd5b818601915086601f8301126113aa57600080fd5b8135818111156113b957600080fd5b8760208260051b85010111156113ce57600080fd5b6020830194508093505050509250925092565b600080604083850312156113f457600080fd5b82356113ff81611344565b946020939093013593505050565b60006020828403121561141f57600080fd5b813561142a81611344565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156114695783518352928401929184019160010161144d565b50909695505050505050565b60006020828403121561148757600080fd5b5035919050565b600080604083850312156114a157600080fd5b82356114ac81611344565b915060208301356114bc81611344565b809150509250929050565b6000602082840312156114d957600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561150957600080fd5b825167ffffffffffffffff8082111561152157600080fd5b818501915085601f83011261153557600080fd5b815181811115611547576115476114e0565b8060051b604051601f19603f8301168101818110858211171561156c5761156c6114e0565b60405291825284820192508381018501918883111561158a57600080fd5b938501935b828510156115a85784518452938501939285019261158f565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156115f3576115f36115ca565b500190565b6000816000190483118215151615611612576116126115ca565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261164a57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611661576116616115ca565b500390565b60006020828403121561167857600080fd5b815161142a81611344565b60006020828403121561169557600080fd5b8151801515811461142a57600080fdfea2646970667358221220477f3429830581dd0332505508a63c086c07330ca8b084703d0e4e7a750b3ad064736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106101355760003560e01c8063887c207a116100ab578063b121c95e1161006f578063b121c95e1461033b578063b36444c81461035b578063bc6e82b314610370578063cdef91d014610385578063da7e690c146103e9578063deb849971461041157600080fd5b8063887c207a14610278578063893d20e81461028e5780638d673c94146102c0578063a6f9dae1146102fb578063aea95da61461031b57600080fd5b80635ece6aa1116100fd5780635ece6aa1146101f157806367349ad81461020657806367a594f61461021b5780636ebf9f65146102305780637bc299d61461023857806387a7433b1461025857600080fd5b806305231dea1461013a578063165059291461015c578063174e31c41461018457806337619e76146101a45780635bf244be146101c4575b600080fd5b34801561014657600080fd5b5061015a610155366004611359565b610426565b005b34801561016857600080fd5b50610171610437565b6040519081526020015b60405180910390f35b34801561019057600080fd5b5061015a61019f3660046113e1565b6104b4565b3480156101b057600080fd5b5061015a6101bf36600461140d565b6104c2565b3480156101d057600080fd5b506101e46101df36600461140d565b6104d8565b60405161017b9190611431565b3480156101fd57600080fd5b50610171606f81565b34801561021257600080fd5b50610171610561565b34801561022757600080fd5b506101716105b5565b61015a610609565b34801561024457600080fd5b5061015a6102533660046113e1565b610629565b34801561026457600080fd5b50610171610273366004611359565b610641565b34801561028457600080fd5b506101716104c681565b34801561029a57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161017b565b3480156102cc57600080fd5b506102e06102db366004611475565b61068d565b6040805193845260208401929092529082015260600161017b565b34801561030757600080fd5b5061015a61031636600461140d565b61071c565b34801561032757600080fd5b5061017161033636600461148e565b6107cc565b34801561034757600080fd5b506101716103563660046113e1565b610828565b34801561036757600080fd5b50610171610880565b34801561037c57600080fd5b506101716108d4565b34801561039157600080fd5b506103c96103a036600461140d565b600260208190526000918252604090912080546001820154928201546003909201549092919084565b60408051948552602085019390935291830152606082015260800161017b565b3480156103f557600080fd5b506102a8736c208c2785050b5a79ac1e7bd317d81a2e47783781565b34801561041d57600080fd5b50610171610928565b6104328333848461097c565b505050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663165059296040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af91906114c7565b905090565b6104be8282610ade565b5050565b6104d581336104d0336104d8565b610be6565b50565b604051632df9225f60e11b81526001600160a01b0382166004820152606090736c208c2785050b5a79ac1e7bd317d81a2e47783790635bf244be90602401600060405180830381865afa158015610533573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055b91908101906114f6565b92915050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b03166367349ad86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b03166367a594f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b61062773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc234610d4a565b565b60006106358383610e5f565b90506104328382610d4a565b600081815b818110156106845761067086868684818110610664576106646115b4565b90506020020135610828565b61067a90846115e0565b9250600101610646565b50509392505050565b60008060008061069b610928565b905060006106a76108d4565b905060006106b3610437565b90506000816106c284866115e0565b6106cc91906115e0565b9050806106d9858a6115f8565b6106e3919061162d565b9650806106f0848a6115f8565b6106fa919061162d565b955061070686886115e0565b610710908961164f565b96989597505050505050565b6000546001600160a01b031633146107715760405162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba1037bbb732b960691b60448201526064015b60405180910390fd5b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806107d8836104d8565b805190915060005b8181101561081f5761080b868483815181106107fe576107fe6115b4565b6020026020010151610828565b61081590856115e0565b93506001016107e0565b50505092915050565b600080610835848461108d565b60008481526001602090815260408083206001600160a01b038916845290915290205490915080821161086d5760009250505061055b565b610877818361164f565b95945050505050565b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663b36444c86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663bc6e82b36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b6000736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b031663deb849976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d6000803e3d6000fd5b600081815b81811015610aca57600085858381811061099d5761099d6115b4565b905060200201359050866001600160a01b0316736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016109f291815260200190565b602060405180830381865afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611666565b6001600160a01b031614610a805760405162461bcd60e51b8152602060048201526014602482015273139bdd0813dddb995c8813d988151bdad95b925160621b6044820152606401610768565b610a8a8882610828565b610a9490856115e0565b9350610aa0888261108d565b60009182526001602081815260408085206001600160a01b038d1686529091529092205501610981565b50610ad6868684611109565b505050505050565b6040516331a9108f60e11b815260048101829052600090736c208c2785050b5a79ac1e7bd317d81a2e47783790636352211e90602401602060405180830381865afa158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b559190611666565b90506001600160a01b038116610b9a5760405162461bcd60e51b815260206004820152600a6024820152692d32b9379027bbb732b960b11b6044820152606401610768565b6000610ba68484610828565b9050610bb2848461108d565b60008481526001602090815260408083206001600160a01b0389168452909152902055610be0848383611109565b50505050565b8051600090815b81811015610d37576000848281518110610c0957610c096115b4565b60200260200101519050856001600160a01b0316736c208c2785050b5a79ac1e7bd317d81a2e4778376001600160a01b0316636352211e836040518263ffffffff1660e01b8152600401610c5f91815260200190565b602060405180830381865afa158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190611666565b6001600160a01b031614610ced5760405162461bcd60e51b8152602060048201526014602482015273139bdd0813dddb995c8813d988151bdad95b925160621b6044820152606401610768565b610cf78782610828565b610d0190856115e0565b9350610d0d878261108d565b60009182526001602081815260408085206001600160a01b038c1686529091529092205501610bed565b50610d43858584611109565b5050505050565b6000806000610d588461068d565b9250925092506000610d68610880565b90506000610d746105b5565b90506000610d80610561565b6001600160a01b038916600090815260026020526040902080548901905590508215610ddc57828681610db557610db5611617565b6001600160a01b038a16600090815260026020526040902060010180549290910490910190555b8115610e1957818581610df157610df1611617565b6001600160a01b038a1660009081526002602081905260409091200180549290910490910190555b8015610e5557808481610e2e57610e2e611617565b6001600160a01b038a16600090815260026020526040902060030180549290910490910190555b5050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc91906114c7565b905073dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b03851601610f5e576040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd90606401600060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b50505050610fd7565b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190611683565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104291906114c7565b90508181116110835760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610768565b610877828261164f565b6000606f8210156110ba57506001600160a01b03821660009081526002602052604090206001015461055b565b6104c68210156110e757506001600160a01b0382166000908152600260208190526040909120015461055b565b506001600160a01b03821660009081526002602052604090206003015461055b565b60006001600160a01b03841673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21461119c576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119791906114c7565b61119e565b475b9050808211156111ac578091505b816000036111ba5750505050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b03851601611245576000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b505090508061123f57600080fd5b50610be0565b73dac17f958d2ee523a2206206994597c13d831ec6196001600160a01b038516016112d15760405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb90604401600060405180830381600087803b1580156112b457600080fd5b505af11580156112c8573d6000803e3d6000fd5b50505050610be0565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015611320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190611683565b6001600160a01b03811681146104d557600080fd5b60008060006040848603121561136e57600080fd5b833561137981611344565b9250602084013567ffffffffffffffff8082111561139657600080fd5b818601915086601f8301126113aa57600080fd5b8135818111156113b957600080fd5b8760208260051b85010111156113ce57600080fd5b6020830194508093505050509250925092565b600080604083850312156113f457600080fd5b82356113ff81611344565b946020939093013593505050565b60006020828403121561141f57600080fd5b813561142a81611344565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156114695783518352928401929184019160010161144d565b50909695505050505050565b60006020828403121561148757600080fd5b5035919050565b600080604083850312156114a157600080fd5b82356114ac81611344565b915060208301356114bc81611344565b809150509250929050565b6000602082840312156114d957600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561150957600080fd5b825167ffffffffffffffff8082111561152157600080fd5b818501915085601f83011261153557600080fd5b815181811115611547576115476114e0565b8060051b604051601f19603f8301168101818110858211171561156c5761156c6114e0565b60405291825284820192508381018501918883111561158a57600080fd5b938501935b828510156115a85784518452938501939285019261158f565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156115f3576115f36115ca565b500190565b6000816000190483118215151615611612576116126115ca565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261164a57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611661576116616115ca565b500390565b60006020828403121561167857600080fd5b815161142a81611344565b60006020828403121561169557600080fd5b8151801515811461142a57600080fdfea2646970667358221220477f3429830581dd0332505508a63c086c07330ca8b084703d0e4e7a750b3ad064736f6c634300080e0033

Deployed Bytecode Sourcemap

5176:8636:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6476:141;;;;;;;;;;-1:-1:-1;6476:141:0;;;;;:::i;:::-;;:::i;:::-;;13385:109;;;;;;;;;;;;;:::i;:::-;;;1051:25:1;;;1039:2;1024:18;13385:109:0;;;;;;;;6625;;;;;;;;;;-1:-1:-1;6625:109:0;;;;;:::i;:::-;;:::i;6326:142::-;;;;;;;;;;-1:-1:-1;6326:142:0;;;;;:::i;:::-;;:::i;12985:162::-;;;;;;;;;;-1:-1:-1;12985:162:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5967:41::-;;;;;;;;;;;;6005:3;5967:41;;13710:99;;;;;;;;;;;;;:::i;13605:::-;;;;;;;;;;;;;:::i;6237:81::-;;;:::i;6067:162::-;;;;;;;;;;-1:-1:-1;6067:162:0;;;;;:::i;:::-;;:::i;11592:362::-;;;;;;;;;;-1:-1:-1;11592:362:0;;;;;:::i;:::-;;:::i;6015:43::-;;;;;;;;;;;;6053:5;6015:43;;4297:83;;;;;;;;;;-1:-1:-1;4340:7:0;4367:5;-1:-1:-1;;;;;4367:5:0;4297:83;;;-1:-1:-1;;;;;2460:32:1;;;2442:51;;2430:2;2415:18;4297:83:0;2296:203:1;10548:498:0;;;;;;;;;;-1:-1:-1;10548:498:0;;;;;:::i;:::-;;:::i;:::-;;;;2891:25:1;;;2947:2;2932:18;;2925:34;;;;2975:18;;;2968:34;2879:2;2864:18;10548:498:0;2689:319:1;4072:132:0;;;;;;;;;;-1:-1:-1;4072:132:0;;;;;:::i;:::-;;:::i;11111:416::-;;;;;;;;;;-1:-1:-1;11111:416:0;;;;;:::i;:::-;;:::i;12019:445::-;;;;;;;;;;-1:-1:-1;12019:445:0;;;;;:::i;:::-;;:::i;13500:99::-;;;;;;;;;;;;;:::i;13270:109::-;;;;;;;;;;;;;:::i;5875:53::-;;;;;;;;;;-1:-1:-1;5875:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:25:1;;;3693:2;3678:18;;3671:34;;;;3721:18;;;3714:34;3779:2;3764:18;;3757:34;3624:3;3609:19;5875:53:0;3406:391:1;5437:84:0;;;;;;;;;;;;5478:42;5437:84;;13155:109;;;;;;;;;;;;;:::i;6476:141::-;6562:47;6581:5;6588:10;6600:8;;6562:18;:47::i;:::-;6476:141;;;:::o;13385:109::-;13434:7;5478:42;-1:-1:-1;;;;;13461:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13454:32;;13385:109;:::o;6625:::-;6698:28;6711:5;6718:7;6698:12;:28::i;:::-;6625:109;;:::o;6326:142::-;6390:70;6415:5;6422:10;6434:25;6448:10;6434:13;:25::i;:::-;6390:24;:70::i;:::-;6326:142;:::o;12985:162::-;13112:27;;-1:-1:-1;;;13112:27:0;;-1:-1:-1;;;;;2460:32:1;;13112:27:0;;;2442:51:1;13071:16:0;;5478:42;;13112:20;;2415:18:1;;13112:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13112:27:0;;;;;;;;;;;;:::i;:::-;13105:34;12985:162;-1:-1:-1;;12985:162:0:o;13710:99::-;13754:7;5478:42;-1:-1:-1;;;;;13781:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13605:99;13649:7;5478:42;-1:-1:-1;;;;;13676:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6237:81;6284:26;5262:42;6300:9;6284;:26::i;:::-;6237:81::o;6067:162::-;6139:16;6158:26;6170:5;6177:6;6158:11;:26::i;:::-;6139:45;;6195:26;6205:5;6212:8;6195:9;:26::i;11592:362::-;11708:13;11753:8;11708:13;11779:168;11803:3;11799:1;:7;11779:168;;;11834:39;11854:5;11861:8;;11870:1;11861:11;;;;;;;:::i;:::-;;;;;;;11834:19;:39::i;:::-;11825:48;;;;:::i;:::-;;-1:-1:-1;11917:3:0;;11779:168;;;;11728:226;11592:362;;;;;:::o;10548:498::-;10648:14;10677;10706;10748:9;10760:18;:16;:18::i;:::-;10748:30;;10789:9;10801:18;:16;:18::i;:::-;10789:30;;10830:9;10842:18;:16;:18::i;:::-;10830:30;-1:-1:-1;10871:10:0;10830:30;10884:11;10891:4;10884;:11;:::i;:::-;:18;;;;:::i;:::-;10871:31;-1:-1:-1;10871:31:0;10924:13;10933:4;10924:6;:13;:::i;:::-;10922:25;;;;:::i;:::-;10913:34;-1:-1:-1;10987:5:0;10969:13;10978:4;10969:6;:13;:::i;:::-;10967:25;;;;:::i;:::-;10958:34;-1:-1:-1;11022:15:0;10958:34;11022:6;:15;:::i;:::-;11012:26;;:6;:26;:::i;:::-;10548:498;;;;-1:-1:-1;;;;;;10548:498:0:o;4072:132::-;3683:5;;-1:-1:-1;;;;;3683:5:0;3669:10;:19;3661:51;;;;-1:-1:-1;;;3661:51:0;;6712:2:1;3661:51:0;;;6694:21:1;6751:2;6731:18;;;6724:30;-1:-1:-1;;;6770:18:1;;;6763:49;6829:18;;3661:51:0;;;;;;;;;4153:5:::1;::::0;;4144:25:::1;::::0;-1:-1:-1;;;;;4144:25:0;;::::1;::::0;4153:5;::::1;::::0;4144:25:::1;::::0;::::1;4180:5;:16:::0;;-1:-1:-1;;;;;;4180:16:0::1;-1:-1:-1::0;;;;;4180:16:0;;;::::1;::::0;;;::::1;::::0;;4072:132::o;11111:416::-;11221:13;11252:25;11280:19;11294:4;11280:13;:19::i;:::-;11326:15;;11252:47;;-1:-1:-1;11312:11:0;11352:168;11376:3;11372:1;:7;11352:168;;;11407:39;11427:5;11434:8;11443:1;11434:11;;;;;;;;:::i;:::-;;;;;;;11407:19;:39::i;:::-;11398:48;;;;:::i;:::-;;-1:-1:-1;11490:3:0;;11352:168;;;;11241:286;;11111:416;;;;:::o;12019:445::-;12128:7;12153:29;12185:38;12208:5;12215:7;12185:22;:38::i;:::-;12234:28;12265:22;;;:13;:22;;;;;;;;-1:-1:-1;;;;;12265:29:0;;;;;;;;;;12153:70;;-1:-1:-1;12311:45:0;;;12307:86;;12380:1;12373:8;;;;;;12307:86;12412:44;12436:20;12412:21;:44;:::i;:::-;12405:51;12019:445;-1:-1:-1;;;;;12019:445:0:o;13500:99::-;13544:7;5478:42;-1:-1:-1;;;;;13571:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13270:109;13319:7;5478:42;-1:-1:-1;;;;;13346:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13155:109;13204:7;5478:42;-1:-1:-1;;;;;13231:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7970:611;8090:13;8128:8;8090:13;8156:347;8180:3;8176:1;:7;8156:347;;;8202:10;8215:8;;8224:1;8215:11;;;;;;;:::i;:::-;;;;;;;8202:24;;8271:4;-1:-1:-1;;;;;8249:26:0;5478:42;-1:-1:-1;;;;;8249:14:0;;8264:2;8249:18;;;;;;;;;;;;;1051:25:1;;1039:2;1024:18;;905:177;8249:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8249:26:0;;8241:59;;;;-1:-1:-1;;;8241:59:0;;7316:2:1;8241:59:0;;;7298:21:1;7355:2;7335:18;;;7328:30;-1:-1:-1;;;7374:18:1;;;7367:50;7434:18;;8241:59:0;7114:344:1;8241:59:0;8324:30;8344:5;8351:2;8324:19;:30::i;:::-;8315:39;;;;:::i;:::-;;;8396:33;8419:5;8426:2;8396:22;:33::i;:::-;8369:17;;;;:13;:17;;;;;;;;-1:-1:-1;;;;;8369:24:0;;;;;;;;;;:60;8473:3;8156:347;;;;8548:25;8554:5;8561:4;8567:5;8548;:25::i;:::-;8079:502;;7970:611;;;;:::o;9262:535::-;9384:23;;-1:-1:-1;;;9384:23:0;;;;;1051:25:1;;;9368:13:0;;5478:42;;9384:14;;1024:18:1;;9384:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9368:39;-1:-1:-1;;;;;;9440:19:0;;9418:79;;;;-1:-1:-1;;;9418:79:0;;7665:2:1;9418:79:0;;;7647:21:1;7704:2;7684:18;;;7677:30;-1:-1:-1;;;7723:18:1;;;7716:40;7773:18;;9418:79:0;7463:334:1;9418:79:0;9544:15;9562:35;9582:5;9589:7;9562:19;:35::i;:::-;9544:53;;9674:38;9697:5;9704:7;9674:22;:38::i;:::-;9642:22;;;;:13;:22;;;;;;;;-1:-1:-1;;;;;9642:29:0;;;;;;;;;:70;9761:28;9665:5;9774;9781:7;9761:5;:28::i;:::-;9325:472;;9262:535;;:::o;8589:615::-;8751:15;;8713:13;;;8779:347;8803:3;8799:1;:7;8779:347;;;8825:10;8838:8;8847:1;8838:11;;;;;;;;:::i;:::-;;;;;;;8825:24;;8894:4;-1:-1:-1;;;;;8872:26:0;5478:42;-1:-1:-1;;;;;8872:14:0;;8887:2;8872:18;;;;;;;;;;;;;1051:25:1;;1039:2;1024:18;;905:177;8872:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8872:26:0;;8864:59;;;;-1:-1:-1;;;8864:59:0;;7316:2:1;8864:59:0;;;7298:21:1;7355:2;7335:18;;;7328:30;-1:-1:-1;;;7374:18:1;;;7367:50;7434:18;;8864:59:0;7114:344:1;8864:59:0;8947:30;8967:5;8974:2;8947:19;:30::i;:::-;8938:39;;;;:::i;:::-;;;9019:33;9042:5;9049:2;9019:22;:33::i;:::-;8992:17;;;;:13;:17;;;;;;;;-1:-1:-1;;;;;8992:24:0;;;;;;;;;;:60;9096:3;8779:347;;;;9171:25;9177:5;9184:4;9190:5;9171;:25::i;:::-;8702:502;;8589:615;;;:::o;6742:691::-;6823:10;6835;6847;6861:20;6874:6;6861:12;:20::i;:::-;6822:59;;;;;;6892:9;6904:13;:11;:13::i;:::-;6892:25;;6928:9;6940:13;:11;:13::i;:::-;6928:25;;6964:9;6976:13;:11;:13::i;:::-;-1:-1:-1;;;;;7025:18:0;;;;;;:11;:18;;;;;:41;;;;;;6964:25;-1:-1:-1;7085:8:0;;7081:102;;7163:4;7158:2;:9;;;;;:::i;:::-;-1:-1:-1;;;;;7114:18:0;;;;;;:11;:18;;;;;:40;;:53;;7158:9;;;;7114:53;;;;;7081:102;7201:8;;7197:102;;7279:4;7274:2;:9;;;;;:::i;:::-;-1:-1:-1;;;;;7230:18:0;;;;;;:11;:18;;;;;;;;:40;:53;;7274:9;;;;7230:53;;;;;7197:102;7317:8;;7313:102;;7395:4;7390:2;:9;;;;;:::i;:::-;-1:-1:-1;;;;;7346:18:0;;;;;;:11;:18;;;;;:40;;:53;;7390:9;;;;7346:53;;;;;7313:102;6801:632;;;;;;6742:691;;:::o;7441:521::-;7548:38;;-1:-1:-1;;;7548:38:0;;7580:4;7548:38;;;2442:51:1;7511:7:0;;;;-1:-1:-1;;;;;7548:23:0;;;;;2415:18:1;;7548:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7531:55;-1:-1:-1;;;;;;;;7601:13:0;;;7597:210;;7631:67;;-1:-1:-1;;;7631:67:0;;7664:10;7631:67;;;8042:34:1;7684:4:0;8092:18:1;;;8085:43;8144:18;;;8137:34;;;-1:-1:-1;;;;;7631:32:0;;;;;7977:18:1;;7631:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7597:210;;;7731:61;;-1:-1:-1;;;7731:61:0;;7758:10;7731:61;;;8042:34:1;7778:4:0;8092:18:1;;;8085:43;8144:18;;;8137:34;;;-1:-1:-1;;;;;7731:26:0;;;;;7977:18:1;;7731:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7597:210;7833:38;;-1:-1:-1;;;7833:38:0;;7865:4;7833:38;;;2442:51:1;7817:13:0;;-1:-1:-1;;;;;7833:23:0;;;;;2415:18:1;;7833:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7817:54;;7898:6;7890:5;:14;7882:40;;;;-1:-1:-1;;;7882:40:0;;8666:2:1;7882:40:0;;;8648:21:1;8705:2;8685:18;;;8678:30;-1:-1:-1;;;8724:18:1;;;8717:43;8777:18;;7882:40:0;8464:337:1;7882:40:0;7940:14;7948:6;7940:5;:14;:::i;12543:434::-;12657:7;6005:3;12686:7;:21;12682:288;;;-1:-1:-1;;;;;;12731:18:0;;;;;;:11;:18;;;;;:40;;;12724:47;;12682:288;6053:5;12793:7;:21;12789:181;;;-1:-1:-1;;;;;;12838:18:0;;;;;;:11;:18;;;;;;;;:40;;12831:47;;12789:181;-1:-1:-1;;;;;;12918:18:0;;;;;;:11;:18;;;;;:40;;;12911:47;;9805:735;9916:12;-1:-1:-1;;;;;9931:13:0;;5262:42;9931:13;:78;;9971:38;;-1:-1:-1;;;9971:38:0;;10003:4;9971:38;;;2442:51:1;-1:-1:-1;;;;;9971:23:0;;;;;2415:18:1;;9971:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9931:78;;;9947:21;9931:78;9916:93;;10033:4;10024:6;:13;10020:59;;;10063:4;10054:13;;10020:59;10128:6;10138:1;10128:11;10124:50;;10156:7;9805:735;;;:::o;10124:50::-;-1:-1:-1;;;;;;;10218:13:0;;;10214:319;;10249:6;10268:2;-1:-1:-1;;;;;10260:16:0;10284:6;10260:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10248:47;;;10318:1;10310:10;;;;;;10233:99;10214:319;;;-1:-1:-1;;;;;;;10357:13:0;;;10353:169;;10391:40;;-1:-1:-1;;;10391:40:0;;-1:-1:-1;;;;;9208:32:1;;;10391:40:0;;;9190:51:1;9257:18;;;9250:34;;;10391:28:0;;;;;9163:18:1;;10391:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:169;;;10472:34;;-1:-1:-1;;;10472:34:0;;-1:-1:-1;;;;;9208:32:1;;;10472:34:0;;;9190:51:1;9257:18;;;9250:34;;;10472:22:0;;;;;9163:18:1;;10472:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:750;245:6;253;261;314:2;302:9;293:7;289:23;285:32;282:52;;;330:1;327;320:12;282:52;369:9;356:23;388:31;413:5;388:31;:::i;:::-;438:5;-1:-1:-1;494:2:1;479:18;;466:32;517:18;547:14;;;544:34;;;574:1;571;564:12;544:34;612:6;601:9;597:22;587:32;;657:7;650:4;646:2;642:13;638:27;628:55;;679:1;676;669:12;628:55;719:2;706:16;745:2;737:6;734:14;731:34;;;761:1;758;751:12;731:34;814:7;809:2;799:6;796:1;792:14;788:2;784:23;780:32;777:45;774:65;;;835:1;832;825:12;774:65;866:2;862;858:11;848:21;;888:6;878:16;;;;;150:750;;;;;:::o;1087:315::-;1155:6;1163;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1271:9;1258:23;1290:31;1315:5;1290:31;:::i;:::-;1340:5;1392:2;1377:18;;;;1364:32;;-1:-1:-1;;;1087:315:1:o;1407:247::-;1466:6;1519:2;1507:9;1498:7;1494:23;1490:32;1487:52;;;1535:1;1532;1525:12;1487:52;1574:9;1561:23;1593:31;1618:5;1593:31;:::i;:::-;1643:5;1407:247;-1:-1:-1;;;1407:247:1:o;1659:632::-;1830:2;1882:21;;;1952:13;;1855:18;;;1974:22;;;1801:4;;1830:2;2053:15;;;;2027:2;2012:18;;;1801:4;2096:169;2110:6;2107:1;2104:13;2096:169;;;2171:13;;2159:26;;2240:15;;;;2205:12;;;;2132:1;2125:9;2096:169;;;-1:-1:-1;2282:3:1;;1659:632;-1:-1:-1;;;;;;1659:632:1:o;2504:180::-;2563:6;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;-1:-1:-1;2655:23:1;;2504:180;-1:-1:-1;2504:180:1:o;3013:388::-;3081:6;3089;3142:2;3130:9;3121:7;3117:23;3113:32;3110:52;;;3158:1;3155;3148:12;3110:52;3197:9;3184:23;3216:31;3241:5;3216:31;:::i;:::-;3266:5;-1:-1:-1;3323:2:1;3308:18;;3295:32;3336:33;3295:32;3336:33;:::i;:::-;3388:7;3378:17;;;3013:388;;;;;:::o;4025:184::-;4095:6;4148:2;4136:9;4127:7;4123:23;4119:32;4116:52;;;4164:1;4161;4154:12;4116:52;-1:-1:-1;4187:16:1;;4025:184;-1:-1:-1;4025:184:1:o;4214:127::-;4275:10;4270:3;4266:20;4263:1;4256:31;4306:4;4303:1;4296:15;4330:4;4327:1;4320:15;4346:1105;4441:6;4472:2;4515;4503:9;4494:7;4490:23;4486:32;4483:52;;;4531:1;4528;4521:12;4483:52;4564:9;4558:16;4593:18;4634:2;4626:6;4623:14;4620:34;;;4650:1;4647;4640:12;4620:34;4688:6;4677:9;4673:22;4663:32;;4733:7;4726:4;4722:2;4718:13;4714:27;4704:55;;4755:1;4752;4745:12;4704:55;4784:2;4778:9;4806:2;4802;4799:10;4796:36;;;4812:18;;:::i;:::-;4858:2;4855:1;4851:10;4890:2;4884:9;4953:2;4949:7;4944:2;4940;4936:11;4932:25;4924:6;4920:38;5008:6;4996:10;4993:22;4988:2;4976:10;4973:18;4970:46;4967:72;;;5019:18;;:::i;:::-;5055:2;5048:22;5105:18;;;5139:15;;;;-1:-1:-1;5181:11:1;;;5177:20;;;5209:19;;;5206:39;;;5241:1;5238;5231:12;5206:39;5265:11;;;;5285:135;5301:6;5296:3;5293:15;5285:135;;;5367:10;;5355:23;;5318:12;;;;5398;;;;5285:135;;;5439:6;4346:1105;-1:-1:-1;;;;;;;;4346:1105:1:o;5456:127::-;5517:10;5512:3;5508:20;5505:1;5498:31;5548:4;5545:1;5538:15;5572:4;5569:1;5562:15;5588:127;5649:10;5644:3;5640:20;5637:1;5630:31;5680:4;5677:1;5670:15;5704:4;5701:1;5694:15;5720:128;5760:3;5791:1;5787:6;5784:1;5781:13;5778:39;;;5797:18;;:::i;:::-;-1:-1:-1;5833:9:1;;5720:128::o;5853:168::-;5893:7;5959:1;5955;5951:6;5947:14;5944:1;5941:21;5936:1;5929:9;5922:17;5918:45;5915:71;;;5966:18;;:::i;:::-;-1:-1:-1;6006:9:1;;5853:168::o;6026:127::-;6087:10;6082:3;6078:20;6075:1;6068:31;6118:4;6115:1;6108:15;6142:4;6139:1;6132:15;6158:217;6198:1;6224;6214:132;;6268:10;6263:3;6259:20;6256:1;6249:31;6303:4;6300:1;6293:15;6331:4;6328:1;6321:15;6214:132;-1:-1:-1;6360:9:1;;6158:217::o;6380:125::-;6420:4;6448:1;6445;6442:8;6439:34;;;6453:18;;:::i;:::-;-1:-1:-1;6490:9:1;;6380:125::o;6858:251::-;6928:6;6981:2;6969:9;6960:7;6956:23;6952:32;6949:52;;;6997:1;6994;6987:12;6949:52;7029:9;7023:16;7048:31;7073:5;7048:31;:::i;8182:277::-;8249:6;8302:2;8290:9;8281:7;8277:23;8273:32;8270:52;;;8318:1;8315;8308:12;8270:52;8350:9;8344:16;8403:5;8396:13;8389:21;8382:5;8379:32;8369:60;;8425:1;8422;8415:12

Swarm Source

ipfs://477f3429830581dd0332505508a63c086c07330ca8b084703d0e4e7a750b3ad0

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.