ETH Price: $3,907.08 (+1.04%)

Contract

0x1298081d0927cA46288173E24e9B44Eaf2c245d9
 

Overview

ETH Balance

0.973187116666666672 ETH

Eth Value

$3,802.32 (@ $3,907.08/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim197411882024-04-26 18:03:47231 days ago1714154627IN
0x1298081d...af2c245d9
0 ETH0.000778927.84134986
Claim192319822024-02-15 7:56:47302 days ago1707983807IN
0x1298081d...af2c245d9
0 ETH0.0021735821.88113526
Claim190150062024-01-15 21:35:47333 days ago1705354547IN
0x1298081d...af2c245d9
0 ETH0.0023898924.05866254
Claim187235132023-12-05 23:46:59373 days ago1701820019IN
0x1298081d...af2c245d9
0 ETH0.0040019448.66416212
Claim186881982023-12-01 1:10:23378 days ago1701393023IN
0x1298081d...af2c245d9
0 ETH0.002951735.89310274
Claim186805032023-11-29 23:19:35379 days ago1701299975IN
0x1298081d...af2c245d9
0 ETH0.0034682934.91474725
Claim186745512023-11-29 3:20:23380 days ago1701228023IN
0x1298081d...af2c245d9
0 ETH0.0037563937.81500073
Claim186492142023-11-25 14:09:47384 days ago1700921387IN
0x1298081d...af2c245d9
0 ETH0.0023212423.36763688
Claim186376872023-11-23 23:25:11385 days ago1700781911IN
0x1298081d...af2c245d9
0 ETH0.0019769324.03973585
Claim186349742023-11-23 14:17:35386 days ago1700749055IN
0x1298081d...af2c245d9
0 ETH0.0031045437.75164423
Claim186336172023-11-23 9:44:59386 days ago1700732699IN
0x1298081d...af2c245d9
0 ETH0.0020676925.14344626
Claim186265322023-11-22 9:57:47387 days ago1700647067IN
0x1298081d...af2c245d9
0 ETH0.0021859126.5809386
Claim186160782023-11-20 22:49:11388 days ago1700520551IN
0x1298081d...af2c245d9
0 ETH0.0029942436.41037324
Claim186117652023-11-20 8:19:23389 days ago1700468363IN
0x1298081d...af2c245d9
0 ETH0.0033114975.49981377
Claim186115482023-11-20 7:34:59389 days ago1700465699IN
0x1298081d...af2c245d9
0 ETH0.0037679537.93139639
Claim186115312023-11-20 7:31:35389 days ago1700465495IN
0x1298081d...af2c245d9
0 ETH0.0038373938.63047495
Claim186105032023-11-20 4:05:23389 days ago1700453123IN
0x1298081d...af2c245d9
0 ETH0.0021283621.42594713
Claim186104232023-11-20 3:49:23389 days ago1700452163IN
0x1298081d...af2c245d9
0 ETH0.0014883418.09841377
Claim186104082023-11-20 3:46:23389 days ago1700451983IN
0x1298081d...af2c245d9
0 ETH0.0017059220.74423679
Claim186018682023-11-18 23:04:11390 days ago1700348651IN
0x1298081d...af2c245d9
0 ETH0.001934519.47438898
Lock153564602022-08-17 3:59:34849 days ago1660708774IN
0x1298081d...af2c245d9
0 ETH0.00157695.49691035
Set Management C...153564412022-08-17 3:55:45849 days ago1660708545IN
0x1298081d...af2c245d9
0 ETH0.000248755.36050922
Mint153340422022-08-13 14:49:52853 days ago1660402192IN
0x1298081d...af2c245d9
1.7 ETH0.0009421612.09391899
Mint153338052022-08-13 13:54:35853 days ago1660398875IN
0x1298081d...af2c245d9
1.3 ETH0.0009502615.6283729
Mint153294582022-08-12 21:41:39854 days ago1660340499IN
0x1298081d...af2c245d9
1 ETH0.0008452513.90126389
View all transactions

Latest 24 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
197411882024-04-26 18:03:47231 days ago1714154627
0x1298081d...af2c245d9
0.02115624 ETH
192319822024-02-15 7:56:47302 days ago1707983807
0x1298081d...af2c245d9
0.1057812 ETH
190150062024-01-15 21:35:47333 days ago1705354547
0x1298081d...af2c245d9
0.04231248 ETH
187235132023-12-05 23:46:59373 days ago1701820019
0x1298081d...af2c245d9
0.06346872 ETH
186881982023-12-01 1:10:23378 days ago1701393023
0x1298081d...af2c245d9
0.06346872 ETH
186805032023-11-29 23:19:35379 days ago1701299975
0x1298081d...af2c245d9
0.8674059 ETH
186745512023-11-29 3:20:23380 days ago1701228023
0x1298081d...af2c245d9
0.16924993 ETH
186492142023-11-25 14:09:47384 days ago1700921387
0x1298081d...af2c245d9
0.1057812 ETH
186376872023-11-23 23:25:11385 days ago1700781911
0x1298081d...af2c245d9
0.02115624 ETH
186349742023-11-23 14:17:35386 days ago1700749055
0x1298081d...af2c245d9
0.04231248 ETH
186336172023-11-23 9:44:59386 days ago1700732699
0x1298081d...af2c245d9
0.06346872 ETH
186265322023-11-22 9:57:47387 days ago1700647067
0x1298081d...af2c245d9
0.02115624 ETH
186160782023-11-20 22:49:11388 days ago1700520551
0x1298081d...af2c245d9
0.02115624 ETH
186115482023-11-20 7:34:59389 days ago1700465699
0x1298081d...af2c245d9
0.1057812 ETH
186115312023-11-20 7:31:35389 days ago1700465495
0x1298081d...af2c245d9
0.16924993 ETH
186105032023-11-20 4:05:23389 days ago1700453123
0x1298081d...af2c245d9
0.08462496 ETH
186104232023-11-20 3:49:23389 days ago1700452163
0x1298081d...af2c245d9
0.04231248 ETH
186104082023-11-20 3:46:23389 days ago1700451983
0x1298081d...af2c245d9
0.02115624 ETH
186018682023-11-18 23:04:11390 days ago1700348651
0x1298081d...af2c245d9
0.16924993 ETH
185963122023-11-18 4:18:23391 days ago1700281103
0x1298081d...af2c245d9
3.17343625 ETH
153564602022-08-17 3:59:34849 days ago1660708774
0x1298081d...af2c245d9
0.375 ETH
153564602022-08-17 3:59:34849 days ago1660708774
0x1298081d...af2c245d9
0.225 ETH
153564602022-08-17 3:59:34849 days ago1660708774
0x1298081d...af2c245d9
14.25 ETH
153564602022-08-17 3:59:34849 days ago1660708774
0x1298081d...af2c245d9
0.15 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VaultsManager

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : PartnerVaultsManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/access/Ownable.sol";


interface IVault {
    function start(uint256 tokenId) external payable;

    function distributeRewards(address account, uint256 balance, uint256 totalSupply) external;
}

interface INft {
    function mint(address sender, uint256 tokenId, uint256 tokens) external;

    function burn(address sender, uint256 tokenId, uint256 tokens) external;

    function totalSupply(uint256 tokenId) view external returns (uint256);

    function balanceOf(address account, uint256 tokenId) view external returns (uint256);
}

interface IDistributor {
    function snapshot() external returns (uint256);

    function receiveFee(uint256 snapshotId) external payable;
}

contract VaultsManager is Ownable {

    enum Status{Pending, Open, Locked, Closed, Exited}
    struct VaultData {
        Status status;
        uint256 price;
        uint256 maxSupply;
        address vaultContract;
        address partnerContract;
        bool publicSale;
        uint256 snapshotId;
        uint256 finalBalance;
    }

    mapping(uint256 => mapping(address => uint256)) public whitelist;

    mapping(uint256 => VaultData) public vaults;
    address public managementContract;
    INft immutable public nft;
    IDistributor immutable public distributor;

    constructor(address nft_, address distributor_) {
        nft = INft(nft_);
        distributor = IDistributor(distributor_);
    }

    function setManagementContract(address managementContract_) external onlyOwner {
        managementContract = managementContract_;
    }

    function totalSupply(uint256 tokenId) view public returns (uint256) {
        return nft.totalSupply(tokenId);
    }

    function balanceOf(address account, uint256 tokenId) view public returns (uint256){
        return nft.balanceOf(account, tokenId);
    }

    function setWhiteList(uint256 tokenId, address[] memory accounts, uint256[] memory whitelistCounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            whitelist[tokenId][accounts[i]] = whitelistCounts[i];
        }
    }

    function openPublic(uint256 tokenId) external onlyOwner {
        require(vaults[tokenId].status == Status.Open, "Manager: not enabled");
        vaults[tokenId].publicSale = true;
    }

    function open(uint256 tokenId, uint256 price, uint256 maxSupply, bool publicSale) external onlyOwner {
        require(tokenId > 0, "Manager: tokenId is 0");
        VaultData memory vault = vaults[tokenId];
        require(vault.status == Status.Pending, "Manager: not pending");
        uint256 snapshotId = distributor.snapshot();
        vaults[tokenId] = VaultData({
            status: Status.Open,
            price: price,
            maxSupply: maxSupply,
            vaultContract: address(0),
            partnerContract: address(0),
            publicSale: publicSale,
            snapshotId: snapshotId,
            finalBalance: 0
        });
    }

    function mint(uint256 tokenId, uint256 tokens) external payable {
        VaultData memory vault = vaults[tokenId];
        require(vault.status == Status.Open, "Manager: not enabled");
        require(totalSupply(tokenId) + tokens <= vault.maxSupply, "Manager: exceeds max");
        require(msg.value == vault.price * tokens, "Manager: wrong amount");
        if (!vault.publicSale) {
            uint256 whitelistCount = whitelist[tokenId][msg.sender];
            require(tokens <= whitelistCount, "Manager: exceeds max");
            whitelist[tokenId][msg.sender] = whitelistCount - tokens;
        }
        nft.mint(msg.sender, tokenId, tokens);
    }

    function lock(uint256 tokenId, address vaultContract, address partnerContract) external onlyOwner {
        VaultData storage vault = vaults[tokenId];
        uint256 totalSupply_ = totalSupply(tokenId);
        require(totalSupply_ > 0, "Manager: no tokens");
        require(managementContract != address(0), "Manager: management contract null");
        require(partnerContract != address(0), "Manager: partner contract null");
        require(vault.status == Status.Open, "Manager: contract not open");
        uint256 balance = vault.price * totalSupply_;
        uint256 managementFee = (balance * 15) / 1000;
        uint256 distributableFee = (balance * 10) / 1000;
        uint256 partnerFee = (balance * 25) / 1000;
        uint256 operationAmount = balance - (managementFee + distributableFee + partnerFee);
        vault.status = Status.Locked;
        vault.vaultContract = vaultContract;
        vault.partnerContract = partnerContract;

        distributor.receiveFee{value : distributableFee}(vault.snapshotId);

        IVault(vaultContract).start{value : operationAmount}(tokenId);

        (bool managementPaymentSuccess,) = payable(managementContract).call{value : managementFee}("");
        require(managementPaymentSuccess, "Manager: unsuccessful payment");

        (bool partnerPaymentSuccess,) = payable(partnerContract).call{value : partnerFee}("");
        require(partnerPaymentSuccess, "Manager: unsuccessful payment");
    }

    function allowExit(uint256 tokenId) external onlyOwner {
        VaultData storage vault = vaults[tokenId];
        require(vault.status == Status.Open, "Manager: bad status");
        vault.status = Status.Exited;
    }

    function exit(uint256 tokenId) external {
        VaultData memory vault = vaults[tokenId];
        require(vault.status == Status.Exited, "Manager: exit not possible");
        uint256 balance = balanceOf(msg.sender, tokenId);
        require(balance > 0, "Manager: not a holder");
        nft.burn(msg.sender, tokenId, balance);
        (bool success,) = payable(msg.sender).call{value : balance * vault.price}("");
        require(success, "Manager: unsuccessful payment");
    }

    function close(uint256 tokenId) external payable {
        VaultData storage vault = vaults[tokenId];
        require(vault.status == Status.Locked, "Manager: not locked");
        require(msg.sender == vault.vaultContract, "Manager: only vault");
        uint256 collected = totalSupply(tokenId) * vault.price;
        uint256 fee;
        uint256 partnerFee;
        if (msg.value > collected) {
            uint256 profit = msg.value - collected;
            fee = (profit * 5) / 100;
            partnerFee = (profit * 15) / 100;
            distributor.receiveFee{value : fee}(vault.snapshotId);
        }
        vault.finalBalance = msg.value - (fee * 2 + partnerFee);
        vault.status = Status.Closed;
        if (fee > 0) {
            (bool managementPaymentSuccess,) = payable(managementContract).call{value : fee}("");
            require(managementPaymentSuccess, "Manager: unsuccessful payment");
        }
        if (partnerFee > 0) {
            (bool partnerPaymentSuccess,) = payable(vault.partnerContract).call{value : partnerFee}("");
            require(partnerPaymentSuccess, "Manager: unsuccessful payment");
        }
    }

    function claimable(address account, uint256 tokenId) public view returns (uint256) {
        uint256 balance = balanceOf(account, tokenId);
        uint256 finalBalance = vaults[tokenId].finalBalance;
        uint256 totalSupply_ = totalSupply(tokenId);
        return (finalBalance * balance) / totalSupply_;
    }

    function claim(uint256 tokenId) external {
        VaultData storage vault = vaults[tokenId];
        require(vault.status == Status.Closed, "Manager: claim not available");
        uint256 balance = balanceOf(msg.sender, tokenId);
        require(balance > 0, "Manager: nothing to claim");
        uint256 totalSupply_ = totalSupply(tokenId);
        uint256 finalBalance = vault.finalBalance;
        uint256 amount = (finalBalance * balance) / totalSupply_;

        IVault(vault.vaultContract).distributeRewards(msg.sender, balance, totalSupply_);

        vault.finalBalance = finalBalance - amount;
        nft.burn(msg.sender, tokenId, balance);

        (bool success,) = payable(msg.sender).call{value : amount}("");
        require(success, "Manager: unsuccessful payment");
    }
}

File 2 of 3 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 3 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"nft_","type":"address"},{"internalType":"address","name":"distributor_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"allowExit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"close","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract IDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"vaultContract","type":"address"},{"internalType":"address","name":"partnerContract","type":"address"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"managementContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract INft","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"bool","name":"publicSale","type":"bool"}],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"openPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"managementContract_","type":"address"}],"name":"setManagementContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"whitelistCounts","type":"uint256[]"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vaults","outputs":[{"internalType":"enum VaultsManager.Status","name":"status","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"address","name":"vaultContract","type":"address"},{"internalType":"address","name":"partnerContract","type":"address"},{"internalType":"bool","name":"publicSale","type":"bool"},{"internalType":"uint256","name":"snapshotId","type":"uint256"},{"internalType":"uint256","name":"finalBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b5060405162004138380380620041388339818101604052810190620000379190620001b0565b620000576200004b620000cd60201b60201c565b620000d560201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050506200023f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620001aa8162000225565b92915050565b60008060408385031215620001c457600080fd5b6000620001d48582860162000199565b9250506020620001e78582860162000199565b9150509250929050565b6000620001fe8262000205565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200023081620001f1565b81146200023c57600080fd5b50565b60805160601c60a05160601c613e95620002a36000396000818161076201528181610d3e0152818161224901526128070152600081816104d6015281816113cc015281816117240152818161186801528181611f5601526121990152613e956000f3fe6080604052600436106101295760003560e01c80636c37eac7116100ab578063b3e5cc4a1161006f578063b3e5cc4a146103c4578063bd85b039146103ef578063bfe109281461042c578063c044e81d14610457578063ecd1eb6c14610480578063f2fde38b146104a957610129565b80636c37eac7146102ec578063715018a6146103155780637f8661a11461032c5780638c64ea4a146103555780638da5cb5b1461039957610129565b8063379607f5116100f2578063379607f5146101f557806347ccca021461021e5780634b25bfce1461024957806360efe334146102865780636558edff146102c357610129565b8062fdd58e1461012e5780630aebeb4e1461016b57806313c89204146101875780631b2ef1ca146101b05780631df77caa146101cc575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612df6565b6104d2565b60405161016291906136e7565b60405180910390f35b61018560048036038101906101809190612e32565b610586565b005b34801561019357600080fd5b506101ae60048036038101906101a99190612fca565b610a2b565b005b6101ca60048036038101906101c59190612f8e565b610fcc565b005b3480156101d857600080fd5b506101f360048036038101906101ee9190612dcd565b61145e565b005b34801561020157600080fd5b5061021c60048036038101906102179190612e32565b61151e565b005b34801561022a57600080fd5b50610233611866565b60405161024091906133ee565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612e84565b61188a565b60405161027d91906136e7565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612df6565b6118af565b6040516102ba91906136e7565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612e32565b611908565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612f0f565b611ab6565b005b34801561032157600080fd5b5061032a611c2c565b005b34801561033857600080fd5b50610353600480360381019061034e9190612e32565b611cb4565b005b34801561036157600080fd5b5061037c60048036038101906103779190612e32565b6120a4565b604051610390989796959493929190613409565b60405180910390f35b3480156103a557600080fd5b506103ae612146565b6040516103bb9190613358565b60405180910390f35b3480156103d057600080fd5b506103d961216f565b6040516103e69190613358565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612e32565b612195565b60405161042391906136e7565b60405180910390f35b34801561043857600080fd5b50610441612247565b60405161044e91906133d3565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612e32565b61226b565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612ec0565b6123ef565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612dcd565b612a89565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b815260040161052e929190613373565b60206040518083038186803b15801561054657600080fd5b505afa15801561055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057e9190612e5b565b905092915050565b6000600260008381526020019081526020016000209050600260048111156105d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff166004811115610621577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065890613507565b60405180910390fd5b8060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90613647565b60405180910390fd5b6000816001015461070384612195565b61070d9190613822565b9050600080823411156107f25760008334610728919061387c565b905060646005826107399190613822565b61074391906137f1565b92506064600f826107549190613822565b61075e91906137f1565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630969acb38487600501546040518363ffffffff1660e01b81526004016107be91906136e7565b6000604051808303818588803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b5050505050505b806002836108009190613822565b61080a919061379b565b34610815919061387c565b846006018190555060038460000160006101000a81548160ff0219169083600481111561086b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506000821115610949576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516108c190613343565b60006040518083038185875af1925050503d80600081146108fe576040519150601f19603f3d011682016040523d82523d6000602084013e610903565b606091505b5050905080610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613667565b60405180910390fd5b505b6000811115610a245760008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161099c90613343565b60006040518083038185875af1925050503d80600081146109d9576040519150601f19603f3d011682016040523d82523d6000602084013e6109de565b606091505b5050905080610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990613667565b60405180910390fd5b505b5050505050565b610a33612b81565b73ffffffffffffffffffffffffffffffffffffffff16610a51612146565b73ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613607565b60405180910390fd5b60008411610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613487565b60405180910390fd5b600060026000868152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115610b56577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610b8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff1615151515815260200160058201548152602001600682015481525050905060006004811115610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600001516004811115610cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d31906134a7565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190612e5b565b905060405180610100016040528060016004811115610e24577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001868152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200182815260200160008152506002600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115610ee6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c0820151816005015560e08201518160060155905050505050505050565b600060026000848152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115611038577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff161515151581526020016005820154815260200160068201548152505090506001600481111561119f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816000015160048111156111dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613687565b60405180910390fd5b80604001518261122b85612195565b611235919061379b565b1115611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90613527565b60405180910390fd5b8181602001516112869190613822565b34146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906135c7565b60405180910390fd5b8060a001516113ca5760006001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613527565b60405180910390fd5b8281611374919061387c565b6001600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663156e29f63385856040518463ffffffff1660e01b81526004016114279392919061339c565b600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b50505050505050565b611466612b81565b73ffffffffffffffffffffffffffffffffffffffff16611484612146565b73ffffffffffffffffffffffffffffffffffffffff16146114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190613607565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006002600083815260200190815260200160002090506003600481111561156f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff1660048111156115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906136c7565b60405180910390fd5b600061160533846104d2565b90506000811161164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613547565b60405180910390fd5b600061165584612195565b9050600083600601549050600082848361166f9190613822565b61167991906137f1565b90508460030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dc3ec4d3386866040518463ffffffff1660e01b81526004016116dc9392919061339c565b600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b50505050808261171a919061387c565b85600601819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5298aca3388876040518463ffffffff1660e01b815260040161177f9392919061339c565b600060405180830381600087803b15801561179957600080fd5b505af11580156117ad573d6000803e3d6000fd5b5050505060003373ffffffffffffffffffffffffffffffffffffffff16826040516117d790613343565b60006040518083038185875af1925050503d8060008114611814576040519150601f19603f3d011682016040523d82523d6000602084013e611819565b606091505b505090508061185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613667565b60405180910390fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001602052816000526040600020602052806000526040600020600091509150505481565b6000806118bc84846104d2565b905060006002600085815260200190815260200160002060060154905060006118e485612195565b90508083836118f39190613822565b6118fd91906137f1565b935050505092915050565b611910612b81565b73ffffffffffffffffffffffffffffffffffffffff1661192e612146565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613607565b60405180910390fd5b6000600260008381526020019081526020016000209050600160048111156119d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff166004811115611a1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613587565b60405180910390fd5b60048160000160006101000a81548160ff02191690836004811115611aad577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505050565b611abe612b81565b73ffffffffffffffffffffffffffffffffffffffff16611adc612146565b73ffffffffffffffffffffffffffffffffffffffff1614611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613607565b60405180910390fd5b60005b8251811015611c2657818181518110611b77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600160008681526020019081526020016000206000858481518110611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611c1e90613996565b915050611b35565b50505050565b611c34612b81565b73ffffffffffffffffffffffffffffffffffffffff16611c52612146565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90613607565b60405180910390fd5b611cb26000612b89565b565b600060026000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115611d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611d58577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152602001600582015481526020016006820154815250509050600480811115611e86577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600001516004811115611ec3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613627565b60405180910390fd5b6000611f0f33846104d2565b905060008111611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906135e7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5298aca3385846040518463ffffffff1660e01b8152600401611fb19392919061339c565b600060405180830381600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b5050505060003373ffffffffffffffffffffffffffffffffffffffff1683602001518361200c9190613822565b60405161201890613343565b60006040518083038185875af1925050503d8060008114612055576040519150601f19603f3d011682016040523d82523d6000602084013e61205a565b606091505b505090508061209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613667565b60405180910390fd5b50505050565b60026020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060050154908060060154905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bd85b039836040518263ffffffff1660e01b81526004016121f091906136e7565b60206040518083038186803b15801561220857600080fd5b505afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612e5b565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b612273612b81565b73ffffffffffffffffffffffffffffffffffffffff16612291612146565b73ffffffffffffffffffffffffffffffffffffffff16146122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90613607565b60405180910390fd5b60016004811115612321577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002600083815260200190815260200160002060000160009054906101000a900460ff16600481111561237d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613687565b60405180910390fd5b60016002600083815260200190815260200160002060040160146101000a81548160ff02191690831515021790555050565b6123f7612b81565b73ffffffffffffffffffffffffffffffffffffffff16612415612146565b73ffffffffffffffffffffffffffffffffffffffff161461246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290613607565b60405180910390fd5b6000600260008581526020019081526020016000209050600061248d85612195565b9050600081116124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906136a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b906134e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906135a7565b60405180910390fd5b6001600481111561260e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260000160009054906101000a900460ff166004811115612658577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90613567565b60405180910390fd5b60008183600101546126aa9190613822565b905060006103e8600f836126be9190613822565b6126c891906137f1565b905060006103e8600a846126dc9190613822565b6126e691906137f1565b905060006103e86019856126fa9190613822565b61270491906137f1565b90506000818385612715919061379b565b61271f919061379b565b8561272a919061387c565b905060028760000160006101000a81548160ff0219169083600481111561277a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550888760030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878760040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630969acb38489600501546040518363ffffffff1660e01b815260040161286391906136e7565b6000604051808303818588803b15801561287c57600080fd5b505af1158015612890573d6000803e3d6000fd5b50505050508873ffffffffffffffffffffffffffffffffffffffff166395805dad828c6040518363ffffffff1660e01b81526004016128cf91906136e7565b6000604051808303818588803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b50505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560405161294990613343565b60006040518083038185875af1925050503d8060008114612986576040519150601f19603f3d011682016040523d82523d6000602084013e61298b565b606091505b50509050806129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690613667565b60405180910390fd5b60008973ffffffffffffffffffffffffffffffffffffffff16846040516129f590613343565b60006040518083038185875af1925050503d8060008114612a32576040519150601f19603f3d011682016040523d82523d6000602084013e612a37565b606091505b5050905080612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7290613667565b60405180910390fd5b505050505050505050505050565b612a91612b81565b73ffffffffffffffffffffffffffffffffffffffff16612aaf612146565b73ffffffffffffffffffffffffffffffffffffffff1614612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613607565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6c906134c7565b60405180910390fd5b612b7e81612b89565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c60612c5b84613727565b613702565b90508083825260208201905082856020860282011115612c7f57600080fd5b60005b85811015612caf5781612c958882612d25565b845260208401935060208301925050600181019050612c82565b5050509392505050565b6000612ccc612cc784613753565b613702565b90508083825260208201905082856020860282011115612ceb57600080fd5b60005b85811015612d1b5781612d018882612da3565b845260208401935060208301925050600181019050612cee565b5050509392505050565b600081359050612d3481613e1a565b92915050565b600082601f830112612d4b57600080fd5b8135612d5b848260208601612c4d565b91505092915050565b600082601f830112612d7557600080fd5b8135612d85848260208601612cb9565b91505092915050565b600081359050612d9d81613e31565b92915050565b600081359050612db281613e48565b92915050565b600081519050612dc781613e48565b92915050565b600060208284031215612ddf57600080fd5b6000612ded84828501612d25565b91505092915050565b60008060408385031215612e0957600080fd5b6000612e1785828601612d25565b9250506020612e2885828601612da3565b9150509250929050565b600060208284031215612e4457600080fd5b6000612e5284828501612da3565b91505092915050565b600060208284031215612e6d57600080fd5b6000612e7b84828501612db8565b91505092915050565b60008060408385031215612e9757600080fd5b6000612ea585828601612da3565b9250506020612eb685828601612d25565b9150509250929050565b600080600060608486031215612ed557600080fd5b6000612ee386828701612da3565b9350506020612ef486828701612d25565b9250506040612f0586828701612d25565b9150509250925092565b600080600060608486031215612f2457600080fd5b6000612f3286828701612da3565b935050602084013567ffffffffffffffff811115612f4f57600080fd5b612f5b86828701612d3a565b925050604084013567ffffffffffffffff811115612f7857600080fd5b612f8486828701612d64565b9150509250925092565b60008060408385031215612fa157600080fd5b6000612faf85828601612da3565b9250506020612fc085828601612da3565b9150509250929050565b60008060008060808587031215612fe057600080fd5b6000612fee87828801612da3565b9450506020612fff87828801612da3565b935050604061301087828801612da3565b925050606061302187828801612d8e565b91505092959194509250565b613036816138b0565b82525050565b613045816138c2565b82525050565b6130548161390b565b82525050565b6130638161392f565b82525050565b61307281613953565b82525050565b600061308560158361378a565b915061309082613aac565b602082019050919050565b60006130a860148361378a565b91506130b382613ad5565b602082019050919050565b60006130cb60268361378a565b91506130d682613afe565b604082019050919050565b60006130ee60218361378a565b91506130f982613b4d565b604082019050919050565b600061311160138361378a565b915061311c82613b9c565b602082019050919050565b600061313460148361378a565b915061313f82613bc5565b602082019050919050565b600061315760198361378a565b915061316282613bee565b602082019050919050565b600061317a601a8361378a565b915061318582613c17565b602082019050919050565b600061319d60138361378a565b91506131a882613c40565b602082019050919050565b60006131c0601e8361378a565b91506131cb82613c69565b602082019050919050565b60006131e360158361378a565b91506131ee82613c92565b602082019050919050565b600061320660158361378a565b915061321182613cbb565b602082019050919050565b600061322960208361378a565b915061323482613ce4565b602082019050919050565b600061324c601a8361378a565b915061325782613d0d565b602082019050919050565b600061326f60138361378a565b915061327a82613d36565b602082019050919050565b6000613292601d8361378a565b915061329d82613d5f565b602082019050919050565b60006132b560008361377f565b91506132c082613d88565b600082019050919050565b60006132d860148361378a565b91506132e382613d8b565b602082019050919050565b60006132fb60128361378a565b915061330682613db4565b602082019050919050565b600061331e601c8361378a565b915061332982613ddd565b602082019050919050565b61333d81613901565b82525050565b600061334e826132a8565b9150819050919050565b600060208201905061336d600083018461302d565b92915050565b6000604082019050613388600083018561302d565b6133956020830184613334565b9392505050565b60006060820190506133b1600083018661302d565b6133be6020830185613334565b6133cb6040830184613334565b949350505050565b60006020820190506133e8600083018461304b565b92915050565b6000602082019050613403600083018461305a565b92915050565b60006101008201905061341f600083018b613069565b61342c602083018a613334565b6134396040830189613334565b613446606083018861302d565b613453608083018761302d565b61346060a083018661303c565b61346d60c0830185613334565b61347a60e0830184613334565b9998505050505050505050565b600060208201905081810360008301526134a081613078565b9050919050565b600060208201905081810360008301526134c08161309b565b9050919050565b600060208201905081810360008301526134e0816130be565b9050919050565b60006020820190508181036000830152613500816130e1565b9050919050565b6000602082019050818103600083015261352081613104565b9050919050565b6000602082019050818103600083015261354081613127565b9050919050565b600060208201905081810360008301526135608161314a565b9050919050565b600060208201905081810360008301526135808161316d565b9050919050565b600060208201905081810360008301526135a081613190565b9050919050565b600060208201905081810360008301526135c0816131b3565b9050919050565b600060208201905081810360008301526135e0816131d6565b9050919050565b60006020820190508181036000830152613600816131f9565b9050919050565b600060208201905081810360008301526136208161321c565b9050919050565b600060208201905081810360008301526136408161323f565b9050919050565b6000602082019050818103600083015261366081613262565b9050919050565b6000602082019050818103600083015261368081613285565b9050919050565b600060208201905081810360008301526136a0816132cb565b9050919050565b600060208201905081810360008301526136c0816132ee565b9050919050565b600060208201905081810360008301526136e081613311565b9050919050565b60006020820190506136fc6000830184613334565b92915050565b600061370c61371d565b90506137188282613965565b919050565b6000604051905090565b600067ffffffffffffffff82111561374257613741613a6c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376e5761376d613a6c565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b60006137a682613901565b91506137b183613901565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137e6576137e56139df565b5b828201905092915050565b60006137fc82613901565b915061380783613901565b92508261381757613816613a0e565b5b828204905092915050565b600061382d82613901565b915061383883613901565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613871576138706139df565b5b828202905092915050565b600061388782613901565b915061389283613901565b9250828210156138a5576138a46139df565b5b828203905092915050565b60006138bb826138e1565b9050919050565b60008115159050919050565b60008190506138dc82613e06565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139168261391d565b9050919050565b6000613928826138e1565b9050919050565b600061393a82613941565b9050919050565b600061394c826138e1565b9050919050565b600061395e826138ce565b9050919050565b61396e82613a9b565b810181811067ffffffffffffffff8211171561398d5761398c613a6c565b5b80604052505050565b60006139a182613901565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d4576139d36139df565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d616e616765723a20746f6b656e496420697320300000000000000000000000600082015250565b7f4d616e616765723a206e6f742070656e64696e67000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d616e616765723a206d616e6167656d656e7420636f6e7472616374206e756c60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d616e616765723a206e6f74206c6f636b656400000000000000000000000000600082015250565b7f4d616e616765723a2065786365656473206d6178000000000000000000000000600082015250565b7f4d616e616765723a206e6f7468696e6720746f20636c61696d00000000000000600082015250565b7f4d616e616765723a20636f6e7472616374206e6f74206f70656e000000000000600082015250565b7f4d616e616765723a206261642073746174757300000000000000000000000000600082015250565b7f4d616e616765723a20706172746e657220636f6e7472616374206e756c6c0000600082015250565b7f4d616e616765723a2077726f6e6720616d6f756e740000000000000000000000600082015250565b7f4d616e616765723a206e6f74206120686f6c6465720000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d616e616765723a2065786974206e6f7420706f737369626c65000000000000600082015250565b7f4d616e616765723a206f6e6c79207661756c7400000000000000000000000000600082015250565b7f4d616e616765723a20756e7375636365737366756c207061796d656e74000000600082015250565b50565b7f4d616e616765723a206e6f7420656e61626c6564000000000000000000000000600082015250565b7f4d616e616765723a206e6f20746f6b656e730000000000000000000000000000600082015250565b7f4d616e616765723a20636c61696d206e6f7420617661696c61626c6500000000600082015250565b60058110613e1757613e16613a3d565b5b50565b613e23816138b0565b8114613e2e57600080fd5b50565b613e3a816138c2565b8114613e4557600080fd5b50565b613e5181613901565b8114613e5c57600080fd5b5056fea2646970667358221220d252ce4e6bc7c6b6bf17e692a3ff4ddf789adcd52e89c0e10657a29fc6ae84d164736f6c63430008040033000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff

Deployed Bytecode

0x6080604052600436106101295760003560e01c80636c37eac7116100ab578063b3e5cc4a1161006f578063b3e5cc4a146103c4578063bd85b039146103ef578063bfe109281461042c578063c044e81d14610457578063ecd1eb6c14610480578063f2fde38b146104a957610129565b80636c37eac7146102ec578063715018a6146103155780637f8661a11461032c5780638c64ea4a146103555780638da5cb5b1461039957610129565b8063379607f5116100f2578063379607f5146101f557806347ccca021461021e5780634b25bfce1461024957806360efe334146102865780636558edff146102c357610129565b8062fdd58e1461012e5780630aebeb4e1461016b57806313c89204146101875780631b2ef1ca146101b05780631df77caa146101cc575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612df6565b6104d2565b60405161016291906136e7565b60405180910390f35b61018560048036038101906101809190612e32565b610586565b005b34801561019357600080fd5b506101ae60048036038101906101a99190612fca565b610a2b565b005b6101ca60048036038101906101c59190612f8e565b610fcc565b005b3480156101d857600080fd5b506101f360048036038101906101ee9190612dcd565b61145e565b005b34801561020157600080fd5b5061021c60048036038101906102179190612e32565b61151e565b005b34801561022a57600080fd5b50610233611866565b60405161024091906133ee565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612e84565b61188a565b60405161027d91906136e7565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612df6565b6118af565b6040516102ba91906136e7565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612e32565b611908565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612f0f565b611ab6565b005b34801561032157600080fd5b5061032a611c2c565b005b34801561033857600080fd5b50610353600480360381019061034e9190612e32565b611cb4565b005b34801561036157600080fd5b5061037c60048036038101906103779190612e32565b6120a4565b604051610390989796959493929190613409565b60405180910390f35b3480156103a557600080fd5b506103ae612146565b6040516103bb9190613358565b60405180910390f35b3480156103d057600080fd5b506103d961216f565b6040516103e69190613358565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612e32565b612195565b60405161042391906136e7565b60405180910390f35b34801561043857600080fd5b50610441612247565b60405161044e91906133d3565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612e32565b61226b565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612ec0565b6123ef565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612dcd565b612a89565b005b60007f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f73ffffffffffffffffffffffffffffffffffffffff1662fdd58e84846040518363ffffffff1660e01b815260040161052e929190613373565b60206040518083038186803b15801561054657600080fd5b505afa15801561055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057e9190612e5b565b905092915050565b6000600260008381526020019081526020016000209050600260048111156105d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff166004811115610621577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065890613507565b60405180910390fd5b8060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea90613647565b60405180910390fd5b6000816001015461070384612195565b61070d9190613822565b9050600080823411156107f25760008334610728919061387c565b905060646005826107399190613822565b61074391906137f1565b92506064600f826107549190613822565b61075e91906137f1565b91507f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff73ffffffffffffffffffffffffffffffffffffffff16630969acb38487600501546040518363ffffffff1660e01b81526004016107be91906136e7565b6000604051808303818588803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b5050505050505b806002836108009190613822565b61080a919061379b565b34610815919061387c565b846006018190555060038460000160006101000a81548160ff0219169083600481111561086b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506000821115610949576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516108c190613343565b60006040518083038185875af1925050503d80600081146108fe576040519150601f19603f3d011682016040523d82523d6000602084013e610903565b606091505b5050905080610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613667565b60405180910390fd5b505b6000811115610a245760008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161099c90613343565b60006040518083038185875af1925050503d80600081146109d9576040519150601f19603f3d011682016040523d82523d6000602084013e6109de565b606091505b5050905080610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990613667565b60405180910390fd5b505b5050505050565b610a33612b81565b73ffffffffffffffffffffffffffffffffffffffff16610a51612146565b73ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613607565b60405180910390fd5b60008411610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613487565b60405180910390fd5b600060026000868152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115610b56577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115610b8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff1615151515815260200160058201548152602001600682015481525050905060006004811115610cbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600001516004811115610cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d31906134a7565b60405180910390fd5b60007f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff73ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190612e5b565b905060405180610100016040528060016004811115610e24577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001868152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200182815260200160008152506002600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115610ee6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c0820151816005015560e08201518160060155905050505050505050565b600060026000848152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115611038577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff161515151581526020016005820154815260200160068201548152505090506001600481111561119f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816000015160048111156111dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613687565b60405180910390fd5b80604001518261122b85612195565b611235919061379b565b1115611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90613527565b60405180910390fd5b8181602001516112869190613822565b34146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906135c7565b60405180910390fd5b8060a001516113ca5760006001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613527565b60405180910390fd5b8281611374919061387c565b6001600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b7f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f73ffffffffffffffffffffffffffffffffffffffff1663156e29f63385856040518463ffffffff1660e01b81526004016114279392919061339c565b600060405180830381600087803b15801561144157600080fd5b505af1158015611455573d6000803e3d6000fd5b50505050505050565b611466612b81565b73ffffffffffffffffffffffffffffffffffffffff16611484612146565b73ffffffffffffffffffffffffffffffffffffffff16146114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190613607565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006002600083815260200190815260200160002090506003600481111561156f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff1660048111156115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906136c7565b60405180910390fd5b600061160533846104d2565b90506000811161164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613547565b60405180910390fd5b600061165584612195565b9050600083600601549050600082848361166f9190613822565b61167991906137f1565b90508460030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638dc3ec4d3386866040518463ffffffff1660e01b81526004016116dc9392919061339c565b600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b50505050808261171a919061387c565b85600601819055507f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f73ffffffffffffffffffffffffffffffffffffffff1663f5298aca3388876040518463ffffffff1660e01b815260040161177f9392919061339c565b600060405180830381600087803b15801561179957600080fd5b505af11580156117ad573d6000803e3d6000fd5b5050505060003373ffffffffffffffffffffffffffffffffffffffff16826040516117d790613343565b60006040518083038185875af1925050503d8060008114611814576040519150601f19603f3d011682016040523d82523d6000602084013e611819565b606091505b505090508061185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613667565b60405180910390fd5b50505050505050565b7f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f81565b6001602052816000526040600020602052806000526040600020600091509150505481565b6000806118bc84846104d2565b905060006002600085815260200190815260200160002060060154905060006118e485612195565b90508083836118f39190613822565b6118fd91906137f1565b935050505092915050565b611910612b81565b73ffffffffffffffffffffffffffffffffffffffff1661192e612146565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613607565b60405180910390fd5b6000600260008381526020019081526020016000209050600160048111156119d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160000160009054906101000a900460ff166004811115611a1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690613587565b60405180910390fd5b60048160000160006101000a81548160ff02191690836004811115611aad577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055505050565b611abe612b81565b73ffffffffffffffffffffffffffffffffffffffff16611adc612146565b73ffffffffffffffffffffffffffffffffffffffff1614611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2990613607565b60405180910390fd5b60005b8251811015611c2657818181518110611b77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600160008681526020019081526020016000206000858481518110611bcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611c1e90613996565b915050611b35565b50505050565b611c34612b81565b73ffffffffffffffffffffffffffffffffffffffff16611c52612146565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90613607565b60405180910390fd5b611cb26000612b89565b565b600060026000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff166004811115611d20577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115611d58577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160149054906101000a900460ff16151515158152602001600582015481526020016006820154815250509050600480811115611e86577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600001516004811115611ec3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613627565b60405180910390fd5b6000611f0f33846104d2565b905060008111611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b906135e7565b60405180910390fd5b7f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f73ffffffffffffffffffffffffffffffffffffffff1663f5298aca3385846040518463ffffffff1660e01b8152600401611fb19392919061339c565b600060405180830381600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b5050505060003373ffffffffffffffffffffffffffffffffffffffff1683602001518361200c9190613822565b60405161201890613343565b60006040518083038185875af1925050503d8060008114612055576040519150601f19603f3d011682016040523d82523d6000602084013e61205a565b606091505b505090508061209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613667565b60405180910390fd5b50505050565b60026020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060050154908060060154905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f73ffffffffffffffffffffffffffffffffffffffff1663bd85b039836040518263ffffffff1660e01b81526004016121f091906136e7565b60206040518083038186803b15801561220857600080fd5b505afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612e5b565b9050919050565b7f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff81565b612273612b81565b73ffffffffffffffffffffffffffffffffffffffff16612291612146565b73ffffffffffffffffffffffffffffffffffffffff16146122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90613607565b60405180910390fd5b60016004811115612321577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002600083815260200190815260200160002060000160009054906101000a900460ff16600481111561237d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613687565b60405180910390fd5b60016002600083815260200190815260200160002060040160146101000a81548160ff02191690831515021790555050565b6123f7612b81565b73ffffffffffffffffffffffffffffffffffffffff16612415612146565b73ffffffffffffffffffffffffffffffffffffffff161461246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290613607565b60405180910390fd5b6000600260008581526020019081526020016000209050600061248d85612195565b9050600081116124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c9906136a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b906134e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906135a7565b60405180910390fd5b6001600481111561260e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8260000160009054906101000a900460ff166004811115612658577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90613567565b60405180910390fd5b60008183600101546126aa9190613822565b905060006103e8600f836126be9190613822565b6126c891906137f1565b905060006103e8600a846126dc9190613822565b6126e691906137f1565b905060006103e86019856126fa9190613822565b61270491906137f1565b90506000818385612715919061379b565b61271f919061379b565b8561272a919061387c565b905060028760000160006101000a81548160ff0219169083600481111561277a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550888760030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878760040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff73ffffffffffffffffffffffffffffffffffffffff16630969acb38489600501546040518363ffffffff1660e01b815260040161286391906136e7565b6000604051808303818588803b15801561287c57600080fd5b505af1158015612890573d6000803e3d6000fd5b50505050508873ffffffffffffffffffffffffffffffffffffffff166395805dad828c6040518363ffffffff1660e01b81526004016128cf91906136e7565b6000604051808303818588803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b50505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560405161294990613343565b60006040518083038185875af1925050503d8060008114612986576040519150601f19603f3d011682016040523d82523d6000602084013e61298b565b606091505b50509050806129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690613667565b60405180910390fd5b60008973ffffffffffffffffffffffffffffffffffffffff16846040516129f590613343565b60006040518083038185875af1925050503d8060008114612a32576040519150601f19603f3d011682016040523d82523d6000602084013e612a37565b606091505b5050905080612a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7290613667565b60405180910390fd5b505050505050505050505050565b612a91612b81565b73ffffffffffffffffffffffffffffffffffffffff16612aaf612146565b73ffffffffffffffffffffffffffffffffffffffff1614612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613607565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6c906134c7565b60405180910390fd5b612b7e81612b89565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c60612c5b84613727565b613702565b90508083825260208201905082856020860282011115612c7f57600080fd5b60005b85811015612caf5781612c958882612d25565b845260208401935060208301925050600181019050612c82565b5050509392505050565b6000612ccc612cc784613753565b613702565b90508083825260208201905082856020860282011115612ceb57600080fd5b60005b85811015612d1b5781612d018882612da3565b845260208401935060208301925050600181019050612cee565b5050509392505050565b600081359050612d3481613e1a565b92915050565b600082601f830112612d4b57600080fd5b8135612d5b848260208601612c4d565b91505092915050565b600082601f830112612d7557600080fd5b8135612d85848260208601612cb9565b91505092915050565b600081359050612d9d81613e31565b92915050565b600081359050612db281613e48565b92915050565b600081519050612dc781613e48565b92915050565b600060208284031215612ddf57600080fd5b6000612ded84828501612d25565b91505092915050565b60008060408385031215612e0957600080fd5b6000612e1785828601612d25565b9250506020612e2885828601612da3565b9150509250929050565b600060208284031215612e4457600080fd5b6000612e5284828501612da3565b91505092915050565b600060208284031215612e6d57600080fd5b6000612e7b84828501612db8565b91505092915050565b60008060408385031215612e9757600080fd5b6000612ea585828601612da3565b9250506020612eb685828601612d25565b9150509250929050565b600080600060608486031215612ed557600080fd5b6000612ee386828701612da3565b9350506020612ef486828701612d25565b9250506040612f0586828701612d25565b9150509250925092565b600080600060608486031215612f2457600080fd5b6000612f3286828701612da3565b935050602084013567ffffffffffffffff811115612f4f57600080fd5b612f5b86828701612d3a565b925050604084013567ffffffffffffffff811115612f7857600080fd5b612f8486828701612d64565b9150509250925092565b60008060408385031215612fa157600080fd5b6000612faf85828601612da3565b9250506020612fc085828601612da3565b9150509250929050565b60008060008060808587031215612fe057600080fd5b6000612fee87828801612da3565b9450506020612fff87828801612da3565b935050604061301087828801612da3565b925050606061302187828801612d8e565b91505092959194509250565b613036816138b0565b82525050565b613045816138c2565b82525050565b6130548161390b565b82525050565b6130638161392f565b82525050565b61307281613953565b82525050565b600061308560158361378a565b915061309082613aac565b602082019050919050565b60006130a860148361378a565b91506130b382613ad5565b602082019050919050565b60006130cb60268361378a565b91506130d682613afe565b604082019050919050565b60006130ee60218361378a565b91506130f982613b4d565b604082019050919050565b600061311160138361378a565b915061311c82613b9c565b602082019050919050565b600061313460148361378a565b915061313f82613bc5565b602082019050919050565b600061315760198361378a565b915061316282613bee565b602082019050919050565b600061317a601a8361378a565b915061318582613c17565b602082019050919050565b600061319d60138361378a565b91506131a882613c40565b602082019050919050565b60006131c0601e8361378a565b91506131cb82613c69565b602082019050919050565b60006131e360158361378a565b91506131ee82613c92565b602082019050919050565b600061320660158361378a565b915061321182613cbb565b602082019050919050565b600061322960208361378a565b915061323482613ce4565b602082019050919050565b600061324c601a8361378a565b915061325782613d0d565b602082019050919050565b600061326f60138361378a565b915061327a82613d36565b602082019050919050565b6000613292601d8361378a565b915061329d82613d5f565b602082019050919050565b60006132b560008361377f565b91506132c082613d88565b600082019050919050565b60006132d860148361378a565b91506132e382613d8b565b602082019050919050565b60006132fb60128361378a565b915061330682613db4565b602082019050919050565b600061331e601c8361378a565b915061332982613ddd565b602082019050919050565b61333d81613901565b82525050565b600061334e826132a8565b9150819050919050565b600060208201905061336d600083018461302d565b92915050565b6000604082019050613388600083018561302d565b6133956020830184613334565b9392505050565b60006060820190506133b1600083018661302d565b6133be6020830185613334565b6133cb6040830184613334565b949350505050565b60006020820190506133e8600083018461304b565b92915050565b6000602082019050613403600083018461305a565b92915050565b60006101008201905061341f600083018b613069565b61342c602083018a613334565b6134396040830189613334565b613446606083018861302d565b613453608083018761302d565b61346060a083018661303c565b61346d60c0830185613334565b61347a60e0830184613334565b9998505050505050505050565b600060208201905081810360008301526134a081613078565b9050919050565b600060208201905081810360008301526134c08161309b565b9050919050565b600060208201905081810360008301526134e0816130be565b9050919050565b60006020820190508181036000830152613500816130e1565b9050919050565b6000602082019050818103600083015261352081613104565b9050919050565b6000602082019050818103600083015261354081613127565b9050919050565b600060208201905081810360008301526135608161314a565b9050919050565b600060208201905081810360008301526135808161316d565b9050919050565b600060208201905081810360008301526135a081613190565b9050919050565b600060208201905081810360008301526135c0816131b3565b9050919050565b600060208201905081810360008301526135e0816131d6565b9050919050565b60006020820190508181036000830152613600816131f9565b9050919050565b600060208201905081810360008301526136208161321c565b9050919050565b600060208201905081810360008301526136408161323f565b9050919050565b6000602082019050818103600083015261366081613262565b9050919050565b6000602082019050818103600083015261368081613285565b9050919050565b600060208201905081810360008301526136a0816132cb565b9050919050565b600060208201905081810360008301526136c0816132ee565b9050919050565b600060208201905081810360008301526136e081613311565b9050919050565b60006020820190506136fc6000830184613334565b92915050565b600061370c61371d565b90506137188282613965565b919050565b6000604051905090565b600067ffffffffffffffff82111561374257613741613a6c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561376e5761376d613a6c565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b60006137a682613901565b91506137b183613901565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137e6576137e56139df565b5b828201905092915050565b60006137fc82613901565b915061380783613901565b92508261381757613816613a0e565b5b828204905092915050565b600061382d82613901565b915061383883613901565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613871576138706139df565b5b828202905092915050565b600061388782613901565b915061389283613901565b9250828210156138a5576138a46139df565b5b828203905092915050565b60006138bb826138e1565b9050919050565b60008115159050919050565b60008190506138dc82613e06565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139168261391d565b9050919050565b6000613928826138e1565b9050919050565b600061393a82613941565b9050919050565b600061394c826138e1565b9050919050565b600061395e826138ce565b9050919050565b61396e82613a9b565b810181811067ffffffffffffffff8211171561398d5761398c613a6c565b5b80604052505050565b60006139a182613901565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d4576139d36139df565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d616e616765723a20746f6b656e496420697320300000000000000000000000600082015250565b7f4d616e616765723a206e6f742070656e64696e67000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d616e616765723a206d616e6167656d656e7420636f6e7472616374206e756c60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d616e616765723a206e6f74206c6f636b656400000000000000000000000000600082015250565b7f4d616e616765723a2065786365656473206d6178000000000000000000000000600082015250565b7f4d616e616765723a206e6f7468696e6720746f20636c61696d00000000000000600082015250565b7f4d616e616765723a20636f6e7472616374206e6f74206f70656e000000000000600082015250565b7f4d616e616765723a206261642073746174757300000000000000000000000000600082015250565b7f4d616e616765723a20706172746e657220636f6e7472616374206e756c6c0000600082015250565b7f4d616e616765723a2077726f6e6720616d6f756e740000000000000000000000600082015250565b7f4d616e616765723a206e6f74206120686f6c6465720000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d616e616765723a2065786974206e6f7420706f737369626c65000000000000600082015250565b7f4d616e616765723a206f6e6c79207661756c7400000000000000000000000000600082015250565b7f4d616e616765723a20756e7375636365737366756c207061796d656e74000000600082015250565b50565b7f4d616e616765723a206e6f7420656e61626c6564000000000000000000000000600082015250565b7f4d616e616765723a206e6f20746f6b656e730000000000000000000000000000600082015250565b7f4d616e616765723a20636c61696d206e6f7420617661696c61626c6500000000600082015250565b60058110613e1757613e16613a3d565b5b50565b613e23816138b0565b8114613e2e57600080fd5b50565b613e3a816138c2565b8114613e4557600080fd5b50565b613e5181613901565b8114613e5c57600080fd5b5056fea2646970667358221220d252ce4e6bc7c6b6bf17e692a3ff4ddf789adcd52e89c0e10657a29fc6ae84d164736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff

-----Decoded View---------------
Arg [0] : nft_ (address): 0xE8BBd0479468B0025E00269516C62119f533971F
Arg [1] : distributor_ (address): 0xb0AF8Ff1089042CAdFD0246ECc074a05053438FF

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e8bbd0479468b0025e00269516c62119f533971f
Arg [1] : 000000000000000000000000b0af8ff1089042cadfd0246ecc074a05053438ff


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  ]
[ 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.