ETH Price: $2,933.47 (+7.54%)
 

Overview

Max Total Supply

146 LEODY

Holders

60

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 LEODY
0x2879b338bfe29a4ad6ac4fe64fd49e72d548cdda
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LeoDynasty

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

}
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}


interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    event Mint(uint indexed index, address indexed minter);
    event Withdraw(address indexed account, uint indexed amount);
    event SaleIsStarted();

    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

}

abstract contract ERC165 is IERC165 {
       function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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);
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract ERC721 is  Context, ERC165,Ownable, AccessControl, IERC721, IERC721Metadata {
    using Address for address;
    using SafeMath for uint256;

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    string private _name;
    string private _symbol;
    string internal baseURI;
    uint internal price = 0.088 ether;
    uint internal price_pre = 0.077 ether;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;
    bool public _startPreSale = false;

    uint256 constant MAX_SUPPLY = 6789;


    mapping (uint256 => address) private _owners;
    mapping (address => uint256) private _balances;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    mapping (uint256 => string) private _tokenURIs;
    mapping (address => uint256[]) public tokensPerOwner;
    mapping(address => uint256[]) internal ownerToIds;
    mapping(uint256 => uint256) internal idToOwnerIndex;



    constructor (string memory name_, string memory symbol_,string memory baseURI_) {
        _name = name_;
        _symbol = symbol_;
        baseURI = baseURI_;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165, AccessControl) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    function totalSupply() public view returns (uint256) {
        return tokensSold;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseURI(), toString(tokenId)));
    }

    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }


    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }


    function _addNFToken(address _to, uint256 _tokenId) internal {
        require(_owners[_tokenId] == address(0), "Cannot add, already owned.");
        _owners[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(_owners[_tokenId] == _from, "Incorrect owner.");
        delete _owners[_tokenId];
        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        tokensSold += 1;
        tokensPerOwner[to].push(tokenId);
        _addNFToken(to, tokenId);
        emit Mint(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function devMint(uint count, address recipient) external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(tokensSold+count <=6789, "The tokens limit has reached.");
        for (uint i = 0; i < count; i++) {
            uint256 _tokenId = tokensSold + 1;
            _mint(recipient, _tokenId);
        }
    }



    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];
        tokensPerOwner[owner].push(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _removeNFToken(from, tokenId);
        _addNFToken(to, tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

contract LeoDynasty is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;

    constructor() ERC721("LeoDynasty", "LEODY", " https://leopards.world/json/") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function pauseContract(bool _paused) external  {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract");
        contractPaused = _paused;
    }

    function setBaseURI(string memory newURI) public returns (bool) {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        baseURI = newURI;
        return true;

    }

    function getTokensByOwner(address _owner) public view returns (uint256[] memory){
        return ownerToIds[_owner];
    }


    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }
    function startPreSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startPreSale);
        _startPreSale = true;
    }
	function buyNFT(uint quantity)external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
        if (!_startSale && !_startPreSale) {
            require(_startSale, "The sale hasn't started.");
        }
        require(tokensSold+quantity <=6789, "The tokens limit has reached.");
        if (_startSale) {
            require(msg.value >= price*quantity, "Insufficient funds to purchase.");
        } else {
            require(msg.value >= price_pre*quantity, "Insufficient funds to purchase.");
        }
		require(quantity>0, "Quantity must be more than 0");
		require(quantity<11, "Quantity must be less than 11");
		uint _tokenId;
		for (uint i = 0; i < quantity; i++) {
			_tokenId = tokensSold + 1;
			_mint(_msgSender(), _tokenId);
		}
        return (true,_tokenId);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startPreSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670138a388a43c00006005556701118f178fb4800060065560006007556008805461ffff191690556011805460ff191690553480156200004357600080fd5b506040518060400160405280600a8152602001694c656f44796e6173747960b01b815250604051806040016040528060058152602001644c454f445960d81b8152506040518060400160405280601d81526020017f2068747470733a2f2f6c656f70617264732e776f726c642f6a736f6e2f000000815250620000d5620000cf6200018860201b60201c565b6200018c565b8251620000ea90600290602086019062000274565b5081516200010090600390602085019062000274565b5080516200011690600490602084019062000274565b506200012a925060009150339050620001dc565b620001567fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620001dc565b620001827f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001dc565b62000357565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001e88282620001ec565b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620001e85760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b82805462000282906200031a565b90600052602060002090601f016020900481019282620002a65760008555620002f1565b82601f10620002c157805160ff1916838001178555620002f1565b82800160010185558215620002f1579182015b82811115620002f1578251825591602001919060010190620002d4565b50620002ff92915062000303565b5090565b5b80821115620002ff576000815560010162000304565b600181811c908216806200032f57607f821691505b602082108114156200035157634e487b7160e01b600052602260045260246000fd5b50919050565b61277d80620003676000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063b66a0e5d116100a0578063d547741f1161006f578063d547741f14610621578063e272b89214610641578063e985e9c514610661578063ef5793ce146106aa578063f2fde38b146106ca57600080fd5b8063b66a0e5d146105aa578063b88d4fde146105bf578063c87b56dd146105df578063d5391393146105ff57600080fd5b806391d14854116100e757806391d148541461052657806395d89b4114610546578063a217fddf1461055b578063a22cb46514610570578063b29185031461059057600080fd5b8063715018a6146104a057806375b238fc146104b55780638a67456a146104e95780638da5cb5b1461050857600080fd5b80632f2ff15d1161019b57806351ed82881161016a57806351ed82881461040157806355dd574c1461042b57806355f804b3146104405780636352211e1461046057806370a082311461048057600080fd5b80632f2ff15d1461037457806336568abe1461039457806340398d67146103b457806342842e0e146103e157600080fd5b80630fba11c0116101e25780630fba11c0146102c557806318160ddd146102e457806323b872dd14610303578063248a9ca3146103235780632d1a12f61461035457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f36600461237c565b6106ea565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106fb565b60405161024091906124d6565b34801561027757600080fd5b5061028b610286366004612342565b61078d565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be3660046122ff565b610827565b005b3480156102d157600080fd5b5060085461023490610100900460ff1681565b3480156102f057600080fd5b506007545b604051908152602001610240565b34801561030f57600080fd5b506102c361031e366004612222565b61093d565b34801561032f57600080fd5b506102f561033e366004612342565b6000908152600160208190526040909120015490565b34801561036057600080fd5b506102c361036f36600461235a565b61096e565b34801561038057600080fd5b506102c361038f36600461235a565b610a3c565b3480156103a057600080fd5b506102c36103af36600461235a565b610acc565b3480156103c057600080fd5b506103d46103cf3660046121d6565b610b46565b6040516102409190612492565b3480156103ed57600080fd5b506102c36103fc366004612222565b610bb2565b61041461040f366004612342565b610bcd565b604080519215158352602083019190915201610240565b34801561043757600080fd5b506102c3610ecf565b34801561044c57600080fd5b5061023461045b3660046123b4565b610f29565b34801561046c57600080fd5b5061028b61047b366004612342565b610f7b565b34801561048c57600080fd5b506102f561049b3660046121d6565b610ff2565b3480156104ac57600080fd5b506102c3611079565b3480156104c157600080fd5b506102f57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104f557600080fd5b5060115461023490610100900460ff1681565b34801561051457600080fd5b506000546001600160a01b031661028b565b34801561053257600080fd5b5061023461054136600461235a565b6110df565b34801561055257600080fd5b5061025e61110a565b34801561056757600080fd5b506102f5600081565b34801561057c57600080fd5b506102c361058b3660046122d6565b611119565b34801561059c57600080fd5b506008546102349060ff1681565b3480156105b657600080fd5b506102c36111de565b3480156105cb57600080fd5b506102c36105da36600461225d565b61125a565b3480156105eb57600080fd5b5061025e6105fa366004612342565b611292565b34801561060b57600080fd5b506102f560008051602061272883398151915281565b34801561062d57600080fd5b506102c361063c36600461235a565b611349565b34801561064d57600080fd5b506102c361065c366004612328565b6113ca565b34801561066d57600080fd5b5061023461067c3660046121f0565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156106b657600080fd5b506102f56106c53660046122ff565b611460565b3480156106d657600080fd5b506102c36106e53660046121d6565b611491565b60006106f58261155c565b92915050565b60606002805461070a90612665565b80601f016020809104026020016040519081016040528092919081815260200182805461073690612665565b80156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b5050505050905090565b6000818152600960205260408120546001600160a01b031661080b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061083282610f7b565b9050806001600160a01b0316836001600160a01b031614156108a05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610802565b336001600160a01b03821614806108bc57506108bc813361067c565b61092e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610802565b610938838361159c565b505050565b610947338261160a565b6109635760405162461bcd60e51b815260040161080290612586565b610938838383611701565b610986600080516020612728833981519152336110df565b6109a25760405162461bcd60e51b81526004016108029061253b565b611a85826007546109b391906125d7565b1115610a015760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610802565b60005b828110156109385760006007546001610a1d91906125d7565b9050610a298382611899565b5080610a34816126a0565b915050610a04565b60008281526001602081905260409091200154610a5a905b336110df565b610abe5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610802565b610ac88282611a43565b5050565b6001600160a01b0381163314610b3c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610802565b610ac88282611aae565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610ba657602002820191906000526020600020905b815481526020019060010190808311610b92575b50505050509050919050565b6109388383836040518060200160405280600081525061125a565b601154600090819060ff1615610c255760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610802565b6011805460ff191660011790819055610100900460ff1615610c4657600080fd5b60085460ff16158015610c615750600854610100900460ff16155b15610cb85760085460ff16610cb85760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610802565b611a8583600754610cc991906125d7565b1115610d175760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610802565b60085460ff1615610d845782600554610d309190612603565b341015610d7f5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610802565b610de1565b82600654610d929190612603565b341015610de15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610802565b60008311610e315760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e2030000000006044820152606401610802565b600b8310610e815760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e2031310000006044820152606401610802565b6000805b84811015610eb957600754610e9b9060016125d7565b9150610ea73383611899565b80610eb1816126a0565b915050610e85565b506011805460ff19169055600194909350915050565b610ee7600080516020612728833981519152336110df565b610f035760405162461bcd60e51b81526004016108029061253b565b600854610100900460ff1615610f1857600080fd5b6008805461ff001916610100179055565b6000610f43600080516020612728833981519152336110df565b610f5f5760405162461bcd60e51b81526004016108029061253b565b8151610f7290600490602085019061209b565b50600192915050565b6000818152600960205260408120546001600160a01b0316806106f55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610802565b60006001600160a01b03821661105d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610802565b506001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b031633146110d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b6110dd6000611b15565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606003805461070a90612665565b6001600160a01b0382163314156111725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610802565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6111f6600080516020612728833981519152336110df565b6112125760405162461bcd60e51b81526004016108029061253b565b60085460ff161561122257600080fd5b6008805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611264338361160a565b6112805760405162461bcd60e51b815260040161080290612586565b61128c84848484611b65565b50505050565b6000818152600960205260409020546060906001600160a01b03166113115760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610802565b611319611b98565b61132283611ba7565b604051602001611333929190612426565b6040516020818303038152906040529050919050565b6000828152600160208190526040909120015461136590610a54565b610b3c5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610802565b6113e2600080516020612728833981519152336110df565b6114465760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610802565b601180549115156101000261ff0019909216919091179055565b600e602052816000526040600020818154811061147c57600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b031633146114eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b6001600160a01b0381166115505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610802565b61155981611b15565b50565b60006001600160e01b031982166380ac58cd60e01b148061158d57506001600160e01b03198216635b5e139f60e01b145b806106f557506106f582611cc1565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115d182610f7b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600960205260408120546001600160a01b03166116835760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610802565b600061168e83610f7b565b9050806001600160a01b0316846001600160a01b031614806116c95750836001600160a01b03166116be8461078d565b6001600160a01b0316145b806116f957506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661171482610f7b565b6001600160a01b03161461177c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610802565b6001600160a01b0382166117de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610802565b6117e960008261159c565b6117f38382611cf6565b6117fd8282611e9f565b6001600160a01b0383166000908152600a60205260408120805460019290611826908490612622565b90915550506001600160a01b0382166000908152600a602052604081208054600192906118549084906125d7565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166118ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610802565b6000818152600960205260409020546001600160a01b0316156119545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610802565b6001600160a01b0382166000908152600a6020526040812080546001929061197d9084906125d7565b9250508190555060016007600082825461199791906125d7565b90915550506001600160a01b0382166000908152600e60209081526040822080546001810182559083529120018190556119d18282611e9f565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611a4d82826110df565b610ac85760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611ab882826110df565b15610ac85760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b70848484611701565b611b7c84848484611f6e565b61128c5760405162461bcd60e51b8152600401610802906124e9565b60606004805461070a90612665565b606081611bcb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bf55780611bdf816126a0565b9150611bee9050600a836125ef565b9150611bcf565b60008167ffffffffffffffff811115611c1e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c48576020820181803683370190505b5090505b84156116f957611c5d600183612622565b9150611c6a600a866126bb565b611c759060306125d7565b60f81b818381518110611c9857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cba600a866125ef565b9450611c4c565b60006001600160e01b03198216637965db0b60e01b14806106f557506301ffc9a760e01b6001600160e01b03198316146106f5565b6000818152600960205260409020546001600160a01b03838116911614611d525760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610802565b600081815260096020908152604080832080546001600160a01b031916905560108252808320546001600160a01b0386168452600f909252822054909190611d9b90600161207b565b9050818114611e4e576001600160a01b0384166000908152600f60205260408120805483908110611ddc57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611e2e57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480611e8357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000818152600960205260409020546001600160a01b031615611f045760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610802565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054611f5b9161207b565b6000918252601060205260409091205550565b60006001600160a01b0384163b1561207057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fb2903390899088908890600401612455565b602060405180830381600087803b158015611fcc57600080fd5b505af1925050508015611ffc575060408051601f3d908101601f19168201909252611ff991810190612398565b60015b612056573d80801561202a576040519150601f19603f3d011682016040523d82523d6000602084013e61202f565b606091505b50805161204e5760405162461bcd60e51b8152600401610802906124e9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116f9565b506001949350505050565b60008282111561208a57600080fd5b6120948284612622565b9392505050565b8280546120a790612665565b90600052602060002090601f0160209004810192826120c9576000855561210f565b82601f106120e257805160ff191683800117855561210f565b8280016001018555821561210f579182015b8281111561210f5782518255916020019190600101906120f4565b5061211b92915061211f565b5090565b5b8082111561211b5760008155600101612120565b600067ffffffffffffffff8084111561214f5761214f6126fb565b604051601f8501601f19908116603f01168101908282118183101715612177576121776126fb565b8160405280935085815286868601111561219057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121c157600080fd5b919050565b803580151581146121c157600080fd5b6000602082840312156121e7578081fd5b612094826121aa565b60008060408385031215612202578081fd5b61220b836121aa565b9150612219602084016121aa565b90509250929050565b600080600060608486031215612236578081fd5b61223f846121aa565b925061224d602085016121aa565b9150604084013590509250925092565b60008060008060808587031215612272578081fd5b61227b856121aa565b9350612289602086016121aa565b925060408501359150606085013567ffffffffffffffff8111156122ab578182fd5b8501601f810187136122bb578182fd5b6122ca87823560208401612134565b91505092959194509250565b600080604083850312156122e8578182fd5b6122f1836121aa565b9150612219602084016121c6565b60008060408385031215612311578182fd5b61231a836121aa565b946020939093013593505050565b600060208284031215612339578081fd5b612094826121c6565b600060208284031215612353578081fd5b5035919050565b6000806040838503121561236c578182fd5b82359150612219602084016121aa565b60006020828403121561238d578081fd5b813561209481612711565b6000602082840312156123a9578081fd5b815161209481612711565b6000602082840312156123c5578081fd5b813567ffffffffffffffff8111156123db578182fd5b8201601f810184136123eb578182fd5b6116f984823560208401612134565b60008151808452612412816020860160208601612639565b601f01601f19169290920160200192915050565b60008351612438818460208801612639565b83519083019061244c818360208801612639565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612488908301846123fa565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124ca578351835292840192918401916001016124ae565b50909695505050505050565b60208152600061209460208301846123fa565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125ea576125ea6126cf565b500190565b6000826125fe576125fe6126e5565b500490565b600081600019048311821515161561261d5761261d6126cf565b500290565b600082821015612634576126346126cf565b500390565b60005b8381101561265457818101518382015260200161263c565b8381111561128c5750506000910152565b600181811c9082168061267957607f821691505b6020821081141561269a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126b4576126b46126cf565b5060010190565b6000826126ca576126ca6126e5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461155957600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122064248f6ed96c8992f1d89f9cc18dee6f6838f397b8c453cf374da92ab9577c6664736f6c63430008040033

Deployed Bytecode

0x60806040526004361061020f5760003560e01c8063715018a611610118578063b66a0e5d116100a0578063d547741f1161006f578063d547741f14610621578063e272b89214610641578063e985e9c514610661578063ef5793ce146106aa578063f2fde38b146106ca57600080fd5b8063b66a0e5d146105aa578063b88d4fde146105bf578063c87b56dd146105df578063d5391393146105ff57600080fd5b806391d14854116100e757806391d148541461052657806395d89b4114610546578063a217fddf1461055b578063a22cb46514610570578063b29185031461059057600080fd5b8063715018a6146104a057806375b238fc146104b55780638a67456a146104e95780638da5cb5b1461050857600080fd5b80632f2ff15d1161019b57806351ed82881161016a57806351ed82881461040157806355dd574c1461042b57806355f804b3146104405780636352211e1461046057806370a082311461048057600080fd5b80632f2ff15d1461037457806336568abe1461039457806340398d67146103b457806342842e0e146103e157600080fd5b80630fba11c0116101e25780630fba11c0146102c557806318160ddd146102e457806323b872dd14610303578063248a9ca3146103235780632d1a12f61461035457600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f36600461237c565b6106ea565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106fb565b60405161024091906124d6565b34801561027757600080fd5b5061028b610286366004612342565b61078d565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be3660046122ff565b610827565b005b3480156102d157600080fd5b5060085461023490610100900460ff1681565b3480156102f057600080fd5b506007545b604051908152602001610240565b34801561030f57600080fd5b506102c361031e366004612222565b61093d565b34801561032f57600080fd5b506102f561033e366004612342565b6000908152600160208190526040909120015490565b34801561036057600080fd5b506102c361036f36600461235a565b61096e565b34801561038057600080fd5b506102c361038f36600461235a565b610a3c565b3480156103a057600080fd5b506102c36103af36600461235a565b610acc565b3480156103c057600080fd5b506103d46103cf3660046121d6565b610b46565b6040516102409190612492565b3480156103ed57600080fd5b506102c36103fc366004612222565b610bb2565b61041461040f366004612342565b610bcd565b604080519215158352602083019190915201610240565b34801561043757600080fd5b506102c3610ecf565b34801561044c57600080fd5b5061023461045b3660046123b4565b610f29565b34801561046c57600080fd5b5061028b61047b366004612342565b610f7b565b34801561048c57600080fd5b506102f561049b3660046121d6565b610ff2565b3480156104ac57600080fd5b506102c3611079565b3480156104c157600080fd5b506102f57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104f557600080fd5b5060115461023490610100900460ff1681565b34801561051457600080fd5b506000546001600160a01b031661028b565b34801561053257600080fd5b5061023461054136600461235a565b6110df565b34801561055257600080fd5b5061025e61110a565b34801561056757600080fd5b506102f5600081565b34801561057c57600080fd5b506102c361058b3660046122d6565b611119565b34801561059c57600080fd5b506008546102349060ff1681565b3480156105b657600080fd5b506102c36111de565b3480156105cb57600080fd5b506102c36105da36600461225d565b61125a565b3480156105eb57600080fd5b5061025e6105fa366004612342565b611292565b34801561060b57600080fd5b506102f560008051602061272883398151915281565b34801561062d57600080fd5b506102c361063c36600461235a565b611349565b34801561064d57600080fd5b506102c361065c366004612328565b6113ca565b34801561066d57600080fd5b5061023461067c3660046121f0565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b3480156106b657600080fd5b506102f56106c53660046122ff565b611460565b3480156106d657600080fd5b506102c36106e53660046121d6565b611491565b60006106f58261155c565b92915050565b60606002805461070a90612665565b80601f016020809104026020016040519081016040528092919081815260200182805461073690612665565b80156107835780601f1061075857610100808354040283529160200191610783565b820191906000526020600020905b81548152906001019060200180831161076657829003601f168201915b5050505050905090565b6000818152600960205260408120546001600160a01b031661080b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600b60205260409020546001600160a01b031690565b600061083282610f7b565b9050806001600160a01b0316836001600160a01b031614156108a05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610802565b336001600160a01b03821614806108bc57506108bc813361067c565b61092e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610802565b610938838361159c565b505050565b610947338261160a565b6109635760405162461bcd60e51b815260040161080290612586565b610938838383611701565b610986600080516020612728833981519152336110df565b6109a25760405162461bcd60e51b81526004016108029061253b565b611a85826007546109b391906125d7565b1115610a015760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610802565b60005b828110156109385760006007546001610a1d91906125d7565b9050610a298382611899565b5080610a34816126a0565b915050610a04565b60008281526001602081905260409091200154610a5a905b336110df565b610abe5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610802565b610ac88282611a43565b5050565b6001600160a01b0381163314610b3c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610802565b610ac88282611aae565b6001600160a01b0381166000908152600f6020908152604091829020805483518184028101840190945280845260609392830182828015610ba657602002820191906000526020600020905b815481526020019060010190808311610b92575b50505050509050919050565b6109388383836040518060200160405280600081525061125a565b601154600090819060ff1615610c255760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610802565b6011805460ff191660011790819055610100900460ff1615610c4657600080fd5b60085460ff16158015610c615750600854610100900460ff16155b15610cb85760085460ff16610cb85760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610802565b611a8583600754610cc991906125d7565b1115610d175760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610802565b60085460ff1615610d845782600554610d309190612603565b341015610d7f5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610802565b610de1565b82600654610d929190612603565b341015610de15760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610802565b60008311610e315760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e2030000000006044820152606401610802565b600b8310610e815760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e2031310000006044820152606401610802565b6000805b84811015610eb957600754610e9b9060016125d7565b9150610ea73383611899565b80610eb1816126a0565b915050610e85565b506011805460ff19169055600194909350915050565b610ee7600080516020612728833981519152336110df565b610f035760405162461bcd60e51b81526004016108029061253b565b600854610100900460ff1615610f1857600080fd5b6008805461ff001916610100179055565b6000610f43600080516020612728833981519152336110df565b610f5f5760405162461bcd60e51b81526004016108029061253b565b8151610f7290600490602085019061209b565b50600192915050565b6000818152600960205260408120546001600160a01b0316806106f55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610802565b60006001600160a01b03821661105d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610802565b506001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b031633146110d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b6110dd6000611b15565b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606003805461070a90612665565b6001600160a01b0382163314156111725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610802565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6111f6600080516020612728833981519152336110df565b6112125760405162461bcd60e51b81526004016108029061253b565b60085460ff161561122257600080fd5b6008805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611264338361160a565b6112805760405162461bcd60e51b815260040161080290612586565b61128c84848484611b65565b50505050565b6000818152600960205260409020546060906001600160a01b03166113115760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610802565b611319611b98565b61132283611ba7565b604051602001611333929190612426565b6040516020818303038152906040529050919050565b6000828152600160208190526040909120015461136590610a54565b610b3c5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610802565b6113e2600080516020612728833981519152336110df565b6114465760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610802565b601180549115156101000261ff0019909216919091179055565b600e602052816000526040600020818154811061147c57600080fd5b90600052602060002001600091509150505481565b6000546001600160a01b031633146114eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610802565b6001600160a01b0381166115505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610802565b61155981611b15565b50565b60006001600160e01b031982166380ac58cd60e01b148061158d57506001600160e01b03198216635b5e139f60e01b145b806106f557506106f582611cc1565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115d182610f7b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600960205260408120546001600160a01b03166116835760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610802565b600061168e83610f7b565b9050806001600160a01b0316846001600160a01b031614806116c95750836001600160a01b03166116be8461078d565b6001600160a01b0316145b806116f957506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661171482610f7b565b6001600160a01b03161461177c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610802565b6001600160a01b0382166117de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610802565b6117e960008261159c565b6117f38382611cf6565b6117fd8282611e9f565b6001600160a01b0383166000908152600a60205260408120805460019290611826908490612622565b90915550506001600160a01b0382166000908152600a602052604081208054600192906118549084906125d7565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166118ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610802565b6000818152600960205260409020546001600160a01b0316156119545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610802565b6001600160a01b0382166000908152600a6020526040812080546001929061197d9084906125d7565b9250508190555060016007600082825461199791906125d7565b90915550506001600160a01b0382166000908152600e60209081526040822080546001810182559083529120018190556119d18282611e9f565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611a4d82826110df565b610ac85760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b611ab882826110df565b15610ac85760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b70848484611701565b611b7c84848484611f6e565b61128c5760405162461bcd60e51b8152600401610802906124e9565b60606004805461070a90612665565b606081611bcb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bf55780611bdf816126a0565b9150611bee9050600a836125ef565b9150611bcf565b60008167ffffffffffffffff811115611c1e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c48576020820181803683370190505b5090505b84156116f957611c5d600183612622565b9150611c6a600a866126bb565b611c759060306125d7565b60f81b818381518110611c9857634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cba600a866125ef565b9450611c4c565b60006001600160e01b03198216637965db0b60e01b14806106f557506301ffc9a760e01b6001600160e01b03198316146106f5565b6000818152600960205260409020546001600160a01b03838116911614611d525760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610802565b600081815260096020908152604080832080546001600160a01b031916905560108252808320546001600160a01b0386168452600f909252822054909190611d9b90600161207b565b9050818114611e4e576001600160a01b0384166000908152600f60205260408120805483908110611ddc57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600f6000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110611e2e57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260109052604090208290555b6001600160a01b0384166000908152600f60205260409020805480611e8357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000818152600960205260409020546001600160a01b031615611f045760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610802565b600081815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600f83529083208054600181810183558286529385200185905592529054611f5b9161207b565b6000918252601060205260409091205550565b60006001600160a01b0384163b1561207057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fb2903390899088908890600401612455565b602060405180830381600087803b158015611fcc57600080fd5b505af1925050508015611ffc575060408051601f3d908101601f19168201909252611ff991810190612398565b60015b612056573d80801561202a576040519150601f19603f3d011682016040523d82523d6000602084013e61202f565b606091505b50805161204e5760405162461bcd60e51b8152600401610802906124e9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116f9565b506001949350505050565b60008282111561208a57600080fd5b6120948284612622565b9392505050565b8280546120a790612665565b90600052602060002090601f0160209004810192826120c9576000855561210f565b82601f106120e257805160ff191683800117855561210f565b8280016001018555821561210f579182015b8281111561210f5782518255916020019190600101906120f4565b5061211b92915061211f565b5090565b5b8082111561211b5760008155600101612120565b600067ffffffffffffffff8084111561214f5761214f6126fb565b604051601f8501601f19908116603f01168101908282118183101715612177576121776126fb565b8160405280935085815286868601111561219057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146121c157600080fd5b919050565b803580151581146121c157600080fd5b6000602082840312156121e7578081fd5b612094826121aa565b60008060408385031215612202578081fd5b61220b836121aa565b9150612219602084016121aa565b90509250929050565b600080600060608486031215612236578081fd5b61223f846121aa565b925061224d602085016121aa565b9150604084013590509250925092565b60008060008060808587031215612272578081fd5b61227b856121aa565b9350612289602086016121aa565b925060408501359150606085013567ffffffffffffffff8111156122ab578182fd5b8501601f810187136122bb578182fd5b6122ca87823560208401612134565b91505092959194509250565b600080604083850312156122e8578182fd5b6122f1836121aa565b9150612219602084016121c6565b60008060408385031215612311578182fd5b61231a836121aa565b946020939093013593505050565b600060208284031215612339578081fd5b612094826121c6565b600060208284031215612353578081fd5b5035919050565b6000806040838503121561236c578182fd5b82359150612219602084016121aa565b60006020828403121561238d578081fd5b813561209481612711565b6000602082840312156123a9578081fd5b815161209481612711565b6000602082840312156123c5578081fd5b813567ffffffffffffffff8111156123db578182fd5b8201601f810184136123eb578182fd5b6116f984823560208401612134565b60008151808452612412816020860160208601612639565b601f01601f19169290920160200192915050565b60008351612438818460208801612639565b83519083019061244c818360208801612639565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612488908301846123fa565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124ca578351835292840192918401916001016124ae565b50909695505050505050565b60208152600061209460208301846123fa565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125ea576125ea6126cf565b500190565b6000826125fe576125fe6126e5565b500490565b600081600019048311821515161561261d5761261d6126cf565b500290565b600082821015612634576126346126cf565b500390565b60005b8381101561265457818101518382015260200161263c565b8381111561128c5750506000910152565b600181811c9082168061267957607f821691505b6020821081141561269a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126b4576126b46126cf565b5060010190565b6000826126ca576126ca6126e5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461155957600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122064248f6ed96c8992f1d89f9cc18dee6f6838f397b8c453cf374da92ab9577c6664736f6c63430008040033

Deployed Bytecode Sourcemap

18517:2553:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19051:161;;;;;;;;;;-1:-1:-1;19051:161:0;;;;;:::i;:::-;;:::i;:::-;;;7426:14:1;;7419:22;7401:41;;7389:2;7374:18;19051:161:0;;;;;;;;10449:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11546:221::-;;;;;;;;;;-1:-1:-1;11546:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6084:32:1;;;6066:51;;6054:2;6039:18;11546:221:0;6021:102:1;11141:397:0;;;;;;;;;;-1:-1:-1;11141:397:0;;;;;:::i;:::-;;:::i;:::-;;8930:33;;;;;;;;;;-1:-1:-1;8930:33:0;;;;;;;;;;;10671:89;;;;;;;;;;-1:-1:-1;10742:10:0;;10671:89;;;7862:25:1;;;7850:2;7835:18;10671:89:0;7817:76:1;12250:252:0;;;;;;;;;;-1:-1:-1;12250:252:0;;;;;:::i;:::-;;:::i;6751:123::-;;;;;;;;;;-1:-1:-1;6751:123:0;;;;;:::i;:::-;6817:7;6844:12;;;:6;:12;;;;;;;;:22;;;6751:123;16057:386;;;;;;;;;;-1:-1:-1;16057:386:0;;;;;:::i;:::-;;:::i;6882:232::-;;;;;;;;;;-1:-1:-1;6882:232:0;;;;;:::i;:::-;;:::i;7365:218::-;;;;;;;;;;-1:-1:-1;7365:218:0;;;;;:::i;:::-;;:::i;19655:124::-;;;;;;;;;;-1:-1:-1;19655:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12510:151::-;;;;;;;;;;-1:-1:-1;12510:151:0;;;;;:::i;:::-;;:::i;20234:829::-;;;;;;:::i;:::-;;:::i;:::-;;;;7646:14:1;;7639:22;7621:41;;7693:2;7678:18;;7671:34;;;;7594:18;20234:829:0;7576:135:1;20024:207:0;;;;;;;;;;;;;:::i;19423:224::-;;;;;;;;;;-1:-1:-1;19423:224:0;;;;;:::i;:::-;;:::i;10202:239::-;;;;;;;;;;-1:-1:-1;10202:239:0;;;;;:::i;:::-;;:::i;9986:208::-;;;;;;;;;;-1:-1:-1;9986:208:0;;;;;:::i;:::-;;:::i;4967:103::-;;;;;;;;;;;;;:::i;8616:60::-;;;;;;;;;;;;8653:23;8616:60;;18622:26;;;;;;;;;;-1:-1:-1;18622:26:0;;;;;;;;;;;4316:87;;;;;;;;;;-1:-1:-1;4362:7:0;4389:6;-1:-1:-1;;;;;4389:6:0;4316:87;;6604:139;;;;;;;;;;-1:-1:-1;6604:139:0;;;;;:::i;:::-;;:::i;10557:104::-;;;;;;;;;;;;;:::i;6013:49::-;;;;;;;;;;-1:-1:-1;6013:49:0;6058:4;6013:49;;11775:295;;;;;;;;;;-1:-1:-1;11775:295:0;;;;;:::i;:::-;;:::i;8893:30::-;;;;;;;;;;-1:-1:-1;8893:30:0;;;;;;;;19789:229;;;;;;;;;;;;;:::i;12669:285::-;;;;;;;;;;-1:-1:-1;12669:285:0;;;;;:::i;:::-;;:::i;10768:256::-;;;;;;;;;;-1:-1:-1;10768:256:0;;;;;:::i;:::-;;:::i;8547:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8547:62:0;;7122:235;;;;;;;;;;-1:-1:-1;7122:235:0;;;;;:::i;:::-;;:::i;19220:195::-;;;;;;;;;;-1:-1:-1;19220:195:0;;;;;:::i;:::-;;:::i;12078:164::-;;;;;;;;;;-1:-1:-1;12078:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12199:25:0;;;12175:4;12199:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12078:164;9313:52;;;;;;;;;;-1:-1:-1;9313:52:0;;;;;:::i;:::-;;:::i;5225:201::-;;;;;;;;;;-1:-1:-1;5225:201:0;;;;;:::i;:::-;;:::i;19051:161::-;19144:4;19168:36;19192:11;19168:23;:36::i;:::-;19161:43;19051:161;-1:-1:-1;;19051:161:0:o;10449:100::-;10503:13;10536:5;10529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10449:100;:::o;11546:221::-;11622:7;13331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13331:16:0;11642:73;;;;-1:-1:-1;;;11642:73:0;;15730:2:1;11642:73:0;;;15712:21:1;15769:2;15749:18;;;15742:30;15808:34;15788:18;;;15781:62;-1:-1:-1;;;15859:18:1;;;15852:42;15911:19;;11642:73:0;;;;;;;;;-1:-1:-1;11735:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11735:24:0;;11546:221::o;11141:397::-;11222:13;11238:23;11253:7;11238:14;:23::i;:::-;11222:39;;11286:5;-1:-1:-1;;;;;11280:11:0;:2;-1:-1:-1;;;;;11280:11:0;;;11272:57;;;;-1:-1:-1;;;11272:57:0;;17675:2:1;11272:57:0;;;17657:21:1;17714:2;17694:18;;;17687:30;17753:34;17733:18;;;17726:62;-1:-1:-1;;;17804:18:1;;;17797:31;17845:19;;11272:57:0;17647:223:1;11272:57:0;3667:10;-1:-1:-1;;;;;11350:21:0;;;;:62;;-1:-1:-1;11375:37:0;11392:5;3667:10;12078:164;:::i;11375:37::-;11342:154;;;;-1:-1:-1;;;11342:154:0;;14123:2:1;11342:154:0;;;14105:21:1;14162:2;14142:18;;;14135:30;14201:34;14181:18;;;14174:62;14272:26;14252:18;;;14245:54;14316:19;;11342:154:0;14095:246:1;11342:154:0;11509:21;11518:2;11522:7;11509:8;:21::i;:::-;11141:397;;;:::o;12250:252::-;12358:41;3667:10;12391:7;12358:18;:41::i;:::-;12350:103;;;;-1:-1:-1;;;12350:103:0;;;;;;;:::i;:::-;12466:28;12476:4;12482:2;12486:7;12466:9;:28::i;16057:386::-;16133:34;-1:-1:-1;;;;;;;;;;;3667:10:0;6604:139;:::i;16133:34::-;16125:90;;;;-1:-1:-1;;;16125:90:0;;;;;;;:::i;:::-;16253:4;16245:5;16234:10;;:16;;;;:::i;:::-;:23;;16226:65;;;;-1:-1:-1;;;16226:65:0;;18495:2:1;16226:65:0;;;18477:21:1;18534:2;18514:18;;;18507:30;18573:31;18553:18;;;18546:59;18622:18;;16226:65:0;18467:179:1;16226:65:0;16307:6;16302:134;16323:5;16319:1;:9;16302:134;;;16350:16;16369:10;;16382:1;16369:14;;;;:::i;:::-;16350:33;;16398:26;16404:9;16415:8;16398:5;:26::i;:::-;-1:-1:-1;16330:3:0;;;;:::i;:::-;;;;16302:134;;6882:232;6817:7;6844:12;;;:6;:12;;;;;;;;:22;;6975:41;;6983:18;3667:10;6604:139;:::i;6975:41::-;6967:101;;;;-1:-1:-1;;;6967:101:0;;8324:2:1;6967:101:0;;;8306:21:1;8363:2;8343:18;;;8336:30;8402:34;8382:18;;;8375:62;-1:-1:-1;;;8453:18:1;;;8446:45;8508:19;;6967:101:0;8296:237:1;6967:101:0;7081:25;7092:4;7098:7;7081:10;:25::i;:::-;6882:232;;:::o;7365:218::-;-1:-1:-1;;;;;7461:23:0;;3667:10;7461:23;7453:83;;;;-1:-1:-1;;;7453:83:0;;19213:2:1;7453:83:0;;;19195:21:1;19252:2;19232:18;;;19225:30;19291:34;19271:18;;;19264:62;-1:-1:-1;;;19342:18:1;;;19335:45;19397:19;;7453:83:0;19185:237:1;7453:83:0;7549:26;7561:4;7567:7;7549:11;:26::i;19655:124::-;-1:-1:-1;;;;;19753:18:0;;;;;;:10;:18;;;;;;;;;19746:25;;;;;;;;;;;;;;;;;19718:16;;19746:25;;;19753:18;19746:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19655:124;;;:::o;12510:151::-;12614:39;12631:4;12637:2;12641:7;12614:39;;;;;;;;;;;;:16;:39::i;20234:829::-;18940:4;;20302;;;;18940;;18939:5;18931:49;;;;-1:-1:-1;;;18931:49:0;;18853:2:1;18931:49:0;;;18835:21:1;18892:2;18872:18;;;18865:30;18931:33;18911:18;;;18904:61;18982:18;;18931:49:0;18825:181:1;18931:49:0;18991:4;:11;;-1:-1:-1;;18991:11:0;18998:4;18991:11;;;;;;20333:14;::::1;18991:11:::0;20333:14:::1;20332:15;20324:24;;;::::0;::::1;;20364:10;::::0;::::1;;20363:11;:29:::0;::::1;;;-1:-1:-1::0;20379:13:0::1;::::0;::::1;::::0;::::1;;;20378:14;20363:29;20359:109;;;20417:10;::::0;::::1;;20409:47;;;::::0;-1:-1:-1;;;20409:47:0;;10280:2:1;20409:47:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;10358:26;10338:18;;;10331:54;10402:18;;20409:47:0::1;10252:174:1::0;20409:47:0::1;20508:4;20497:8;20486:10;;:19;;;;:::i;:::-;:26;;20478:68;;;::::0;-1:-1:-1;;;20478:68:0;;18495:2:1;20478:68:0::1;::::0;::::1;18477:21:1::0;18534:2;18514:18;;;18507:30;18573:31;18553:18;;;18546:59;18622:18;;20478:68:0::1;18467:179:1::0;20478:68:0::1;20561:10;::::0;::::1;;20557:222;;;20615:8;20609:5;;:14;;;;:::i;:::-;20596:9;:27;;20588:71;;;::::0;-1:-1:-1;;;20588:71:0;;12159:2:1;20588:71:0::1;::::0;::::1;12141:21:1::0;12198:2;12178:18;;;12171:30;12237:33;12217:18;;;12210:61;12288:18;;20588:71:0::1;12131:181:1::0;20588:71:0::1;20557:222;;;20723:8;20713:9;;:18;;;;:::i;:::-;20700:9;:31;;20692:75;;;::::0;-1:-1:-1;;;20692:75:0;;12159:2:1;20692:75:0::1;::::0;::::1;12141:21:1::0;12198:2;12178:18;;;12171:30;12237:33;12217:18;;;12210:61;12288:18;;20692:75:0::1;12131:181:1::0;20692:75:0::1;20800:1;20791:8;:10;20783:51;;;::::0;-1:-1:-1;;;20783:51:0;;9566:2:1;20783:51:0::1;::::0;::::1;9548:21:1::0;9605:2;9585:18;;;9578:30;9644;9624:18;;;9617:58;9692:18;;20783:51:0::1;9538:178:1::0;20783:51:0::1;20856:2;20847:8;:11;20839:53;;;::::0;-1:-1:-1;;;20839:53:0;;12519:2:1;20839:53:0::1;::::0;::::1;12501:21:1::0;12558:2;12538:18;;;12531:30;12597:31;12577:18;;;12570:59;12646:18;;20839:53:0::1;12491:179:1::0;20839:53:0::1;20897:13;::::0;20915:108:::1;20936:8;20932:1;:12;20915:108;;;20968:10;::::0;:14:::1;::::0;20981:1:::1;20968:14;:::i;:::-;20957:25:::0;-1:-1:-1;20988:29:0::1;3667:10:::0;21008:8:::1;20988:5;:29::i;:::-;20946:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20915:108;;;-1:-1:-1::0;19025:4:0;:12;;-1:-1:-1;;19025:12:0;;;21041:4:::1;::::0;21046:8;;-1:-1:-1;20234:829:0;-1:-1:-1;;20234:829:0:o;20024:207::-;20076:34;-1:-1:-1;;;;;;;;;;;3667:10:0;6604:139;:::i;20076:34::-;20068:90;;;;-1:-1:-1;;;20068:90:0;;;;;;;:::i;:::-;20178:13;;;;;;;20177:14;20169:23;;;;;;20203:13;:20;;-1:-1:-1;;20203:20:0;;;;;20024:207::o;19423:224::-;19481:4;19506:34;-1:-1:-1;;;;;;;;;;;3667:10:0;6604:139;:::i;19506:34::-;19498:90;;;;-1:-1:-1;;;19498:90:0;;;;;;;:::i;:::-;19599:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;19633:4:0;;19423:224;-1:-1:-1;;19423:224:0:o;10202:239::-;10274:7;10310:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10310:16:0;10345:19;10337:73;;;;-1:-1:-1;;;10337:73:0;;14959:2:1;10337:73:0;;;14941:21:1;14998:2;14978:18;;;14971:30;15037:34;15017:18;;;15010:62;-1:-1:-1;;;15088:18:1;;;15081:39;15137:19;;10337:73:0;14931:231:1;9986:208:0;10058:7;-1:-1:-1;;;;;10086:19:0;;10078:74;;;;-1:-1:-1;;;10078:74:0;;14548:2:1;10078:74:0;;;14530:21:1;14587:2;14567:18;;;14560:30;14626:34;14606:18;;;14599:62;-1:-1:-1;;;14677:18:1;;;14670:40;14727:19;;10078:74:0;14520:232:1;10078:74:0;-1:-1:-1;;;;;;10170:16:0;;;;;:9;:16;;;;;;;9986:208::o;4967:103::-;4362:7;4389:6;-1:-1:-1;;;;;4389:6:0;3667:10;4536:23;4528:68;;;;-1:-1:-1;;;4528:68:0;;16143:2:1;4528:68:0;;;16125:21:1;;;16162:18;;;16155:30;16221:34;16201:18;;;16194:62;16273:18;;4528:68:0;16115:182:1;4528:68:0;5032:30:::1;5059:1;5032:18;:30::i;:::-;4967:103::o:0;6604:139::-;6682:4;6706:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6706:29:0;;;;;;;;;;;;;;;6604:139::o;10557:104::-;10613:13;10646:7;10639:14;;;;;:::i;11775:295::-;-1:-1:-1;;;;;11878:24:0;;3667:10;11878:24;;11870:62;;;;-1:-1:-1;;;11870:62:0;;11450:2:1;11870:62:0;;;11432:21:1;11489:2;11469:18;;;11462:30;11528:27;11508:18;;;11501:55;11573:18;;11870:62:0;11422:175:1;11870:62:0;3667:10;11945:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11945:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;11945:53:0;;;;;;;;;;12014:48;;7401:41:1;;;11945:42:0;;3667:10;12014:48;;7374:18:1;12014:48:0;;;;;;;11775:295;;:::o;19789:229::-;19838:34;-1:-1:-1;;;;;;;;;;;3667:10:0;6604:139;:::i;19838:34::-;19830:90;;;;-1:-1:-1;;;19830:90:0;;;;;;;:::i;:::-;19940:10;;;;19939:11;19931:20;;;;;;19962:10;:17;;-1:-1:-1;;19962:17:0;19975:4;19962:17;;;19995:15;;;;19962:10;;19995:15;19789:229::o;12669:285::-;12801:41;3667:10;12834:7;12801:18;:41::i;:::-;12793:103;;;;-1:-1:-1;;;12793:103:0;;;;;;;:::i;:::-;12907:39;12921:4;12927:2;12931:7;12940:5;12907:13;:39::i;:::-;12669:285;;;;:::o;10768:256::-;13307:4;13331:16;;;:7;:16;;;;;;10841:13;;-1:-1:-1;;;;;13331:16:0;10867:76;;;;-1:-1:-1;;;10867:76:0;;16914:2:1;10867:76:0;;;16896:21:1;16953:2;16933:18;;;16926:30;16992:34;16972:18;;;16965:62;-1:-1:-1;;;17043:18:1;;;17036:45;17098:19;;10867:76:0;16886:237:1;10867:76:0;10985:10;:8;:10::i;:::-;10997:17;11006:7;10997:8;:17::i;:::-;10968:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10954:62;;10768:256;;;:::o;7122:235::-;6817:7;6844:12;;;:6;:12;;;;;;;;:22;;7216:41;;7224:18;6751:123;7216:41;7208:102;;;;-1:-1:-1;;;7208:102:0;;13706:2:1;7208:102:0;;;13688:21:1;13745:2;13725:18;;;13718:30;13784:34;13764:18;;;13757:62;-1:-1:-1;;;13835:18:1;;;13828:46;13891:19;;7208:102:0;13678:238:1;19220:195:0;19286:34;-1:-1:-1;;;;;;;;;;;3667:10:0;6604:139;:::i;19286:34::-;19278:94;;;;-1:-1:-1;;;19278:94:0;;13290:2:1;19278:94:0;;;13272:21:1;13329:2;13309:18;;;13302:30;13368:34;13348:18;;;13341:62;-1:-1:-1;;;13419:18:1;;;13412:45;13474:19;;19278:94:0;13262:237:1;19278:94:0;19383:14;:24;;;;;;;-1:-1:-1;;19383:24:0;;;;;;;;;19220:195::o;9313:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5225:201::-;4362:7;4389:6;-1:-1:-1;;;;;4389:6:0;3667:10;4536:23;4528:68;;;;-1:-1:-1;;;4528:68:0;;16143:2:1;4528:68:0;;;16125:21:1;;;16162:18;;;16155:30;16221:34;16201:18;;;16194:62;16273:18;;4528:68:0;16115:182:1;4528:68:0;-1:-1:-1;;;;;5314:22:0;::::1;5306:73;;;::::0;-1:-1:-1;;;5306:73:0;;9159:2:1;5306:73:0::1;::::0;::::1;9141:21:1::0;9198:2;9178:18;;;9171:30;9237:34;9217:18;;;9210:62;-1:-1:-1;;;9288:18:1;;;9281:36;9334:19;;5306:73:0::1;9131:228:1::0;5306:73:0::1;5390:28;5409:8;5390:18;:28::i;:::-;5225:201:::0;:::o;9671:307::-;9788:4;-1:-1:-1;;;;;;9812:40:0;;-1:-1:-1;;;9812:40:0;;:105;;-1:-1:-1;;;;;;;9869:48:0;;-1:-1:-1;;;9869:48:0;9812:105;:158;;;;9934:36;9958:11;9934:23;:36::i;17384:174::-;17459:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;17459:29:0;-1:-1:-1;;;;;17459:29:0;;;;;;;;:24;;17513:23;17459:24;17513:14;:23::i;:::-;-1:-1:-1;;;;;17504:46:0;;;;;;;;;;;17384:174;;:::o;13377:348::-;13470:4;13331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13331:16:0;13487:73;;;;-1:-1:-1;;;13487:73:0;;12877:2:1;13487:73:0;;;12859:21:1;12916:2;12896:18;;;12889:30;12955:34;12935:18;;;12928:62;-1:-1:-1;;;13006:18:1;;;12999:42;13058:19;;13487:73:0;12849:234:1;13487:73:0;13571:13;13587:23;13602:7;13587:14;:23::i;:::-;13571:39;;13640:5;-1:-1:-1;;;;;13629:16:0;:7;-1:-1:-1;;;;;13629:16:0;;:51;;;;13673:7;-1:-1:-1;;;;;13649:31:0;:20;13661:7;13649:11;:20::i;:::-;-1:-1:-1;;;;;13649:31:0;;13629:51;:87;;;-1:-1:-1;;;;;;12199:25:0;;;12175:4;12199:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13684:32;13621:96;13377:348;-1:-1:-1;;;;13377:348:0:o;16839:537::-;16964:4;-1:-1:-1;;;;;16937:31:0;:23;16952:7;16937:14;:23::i;:::-;-1:-1:-1;;;;;16937:31:0;;16929:85;;;;-1:-1:-1;;;16929:85:0;;16504:2:1;16929:85:0;;;16486:21:1;16543:2;16523:18;;;16516:30;16582:34;16562:18;;;16555:62;-1:-1:-1;;;16633:18:1;;;16626:39;16682:19;;16929:85:0;16476:231:1;16929:85:0;-1:-1:-1;;;;;17033:16:0;;17025:65;;;;-1:-1:-1;;;17025:65:0;;11045:2:1;17025:65:0;;;11027:21:1;11084:2;11064:18;;;11057:30;11123:34;11103:18;;;11096:62;-1:-1:-1;;;11174:18:1;;;11167:34;11218:19;;17025:65:0;11017:226:1;17025:65:0;17155:29;17172:1;17176:7;17155:8;:29::i;:::-;17197;17212:4;17218:7;17197:14;:29::i;:::-;17237:24;17249:2;17253:7;17237:11;:24::i;:::-;-1:-1:-1;;;;;17274:15:0;;;;;;:9;:15;;;;;:20;;17293:1;;17274:15;:20;;17293:1;;17274:20;:::i;:::-;;;;-1:-1:-1;;;;;;;17305:13:0;;;;;;:9;:13;;;;;:18;;17322:1;;17305:13;:18;;17322:1;;17305:18;:::i;:::-;;;;-1:-1:-1;;17341:27:0;;17360:7;;-1:-1:-1;;;;;17341:27:0;;;;;;;;;;;;;16839:537;;;:::o;15564:485::-;-1:-1:-1;;;;;15644:16:0;;15636:61;;;;-1:-1:-1;;;15636:61:0;;15369:2:1;15636:61:0;;;15351:21:1;;;15388:18;;;15381:30;15447:34;15427:18;;;15420:62;15499:18;;15636:61:0;15341:182:1;15636:61:0;13307:4;13331:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13331:16:0;:30;15708:58;;;;-1:-1:-1;;;15708:58:0;;9923:2:1;15708:58:0;;;9905:21:1;9962:2;9942:18;;;9935:30;10001;9981:18;;;9974:58;10049:18;;15708:58:0;9895:178:1;15708:58:0;-1:-1:-1;;;;;15837:13:0;;;;;;:9;:13;;;;;:18;;15854:1;;15837:13;:18;;15854:1;;15837:18;:::i;:::-;;;;;;;;15880:1;15866:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15892:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;15935:24;15907:2;15916:7;15935:11;:24::i;:::-;15975:17;;-1:-1:-1;;;;;15975:17:0;;;15980:7;;15975:17;;;;;16008:33;;16033:7;;-1:-1:-1;;;;;16008:33:0;;;16025:1;;16008:33;;16025:1;;16008:33;15564:485;;:::o;7914:229::-;7989:22;7997:4;8003:7;7989;:22::i;:::-;7984:152;;8028:12;;;;8060:4;8028:12;;;;;;;;-1:-1:-1;;;;;8028:29:0;;;;;;;;;;:36;;-1:-1:-1;;8028:36:0;;;;;;;8084:40;;3667:10;;8028:12;;8084:40;;8028:12;8084:40;7914:229;;:::o;8151:230::-;8226:22;8234:4;8240:7;8226;:22::i;:::-;8222:152;;;8297:5;8265:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;8265:29:0;;;;;;;;;;:37;;-1:-1:-1;;8265:37:0;;;8322:40;3667:10;;8265:12;;8322:40;;8297:5;8322:40;8151:230;;:::o;5586:191::-;5660:16;5679:6;;-1:-1:-1;;;;;5696:17:0;;;-1:-1:-1;;;;;;5696:17:0;;;;;;5729:40;;5679:6;;;;;;;5729:40;;5660:16;5729:40;5586:191;;:::o;12962:272::-;13076:28;13086:4;13092:2;13096:7;13076:9;:28::i;:::-;13123:48;13146:4;13152:2;13156:7;13165:5;13123:22;:48::i;:::-;13115:111;;;;-1:-1:-1;;;13115:111:0;;;;;;;:::i;11032:99::-;11083:13;11116:7;11109:14;;;;;:::i;14109:534::-;14165:13;14197:10;14193:53;;-1:-1:-1;;14224:10:0;;;;;;;;;;;;-1:-1:-1;;;14224:10:0;;;;;14109:534::o;14193:53::-;14271:5;14256:12;14312:78;14319:9;;14312:78;;14345:8;;;;:::i;:::-;;-1:-1:-1;14368:10:0;;-1:-1:-1;14376:2:0;14368:10;;:::i;:::-;;;14312:78;;;14400:19;14432:6;14422:17;;;;;;-1:-1:-1;;;14422:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14422:17:0;;14400:39;;14450:154;14457:10;;14450:154;;14484:11;14494:1;14484:11;;:::i;:::-;;-1:-1:-1;14553:10:0;14561:2;14553:5;:10;:::i;:::-;14540:24;;:2;:24;:::i;:::-;14527:39;;14510:6;14517;14510:14;;;;;;-1:-1:-1;;;14510:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;14510:56:0;;;;;;;;-1:-1:-1;14581:11:0;14590:2;14581:11;;:::i;:::-;;;14450:154;;6379:217;6464:4;-1:-1:-1;;;;;;6488:47:0;;-1:-1:-1;;;6488:47:0;;:100;;-1:-1:-1;;;;;;;;;;3849:40:0;;;6552:36;3740:157;14955:601;15040:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;15040:26:0;;;:17;;:26;15032:55;;;;-1:-1:-1;;;15032:55:0;;17330:2:1;15032:55:0;;;17312:21:1;17369:2;17349:18;;;17342:30;-1:-1:-1;;;17388:18:1;;;17381:46;17444:18;;15032:55:0;17302:166:1;15032:55:0;15105:17;;;;:7;:17;;;;;;;;15098:24;;-1:-1:-1;;;;;;15098:24:0;;;15162:14;:24;;;;;;-1:-1:-1;;;;;15222:17:0;;;;:10;:17;;;;;:24;15162;;15105:17;15222:31;;15098:24;15222:28;:31::i;:::-;15197:56;;15288:18;15270:14;:36;15266:247;;-1:-1:-1;;;;;15343:17:0;;15323;15343;;;:10;:17;;;;;:33;;15361:14;;15343:33;;;;-1:-1:-1;;;15343:33:0;;;;;;;;;;;;;;;;;15323:53;;15431:9;15391:10;:17;15402:5;-1:-1:-1;;;;;15391:17:0;-1:-1:-1;;;;;15391:17:0;;;;;;;;;;;;15409:18;15391:37;;;;;;-1:-1:-1;;;15391:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;15455:25;;;:14;:25;;;;;:46;;;15266:247;-1:-1:-1;;;;;15525:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;15525:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14955:601;;;;:::o;14653:294::-;14762:1;14733:17;;;:7;:17;;;;;;-1:-1:-1;;;;;14733:17:0;:31;14725:70;;;;-1:-1:-1;;;14725:70:0;;11804:2:1;14725:70:0;;;11786:21:1;11843:2;11823:18;;;11816:30;11882:28;11862:18;;;11855:56;11928:18;;14725:70:0;11776:176:1;14725:70:0;14806:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;14806:23:0;-1:-1:-1;;;;;14806:23:0;;;;;;;;14842:15;;;:10;:15;;;;;:30;;-1:-1:-1;14842:30:0;;;;;;;;;;;;;;;14910:15;;:22;;:29;;:26;:29::i;:::-;14883:24;;;;:14;:24;;;;;;:56;-1:-1:-1;14653:294:0:o;17566:843::-;17687:4;-1:-1:-1;;;;;17713:13:0;;208:20;247:8;17709:693;;17749:72;;-1:-1:-1;;;17749:72:0;;-1:-1:-1;;;;;17749:36:0;;;;;:72;;3667:10;;17800:4;;17806:7;;17815:5;;17749:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17749:72:0;;;;;;;;-1:-1:-1;;17749:72:0;;;;;;;;;;;;:::i;:::-;;;17745:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17995:13:0;;17991:341;;18038:60;;-1:-1:-1;;;18038:60:0;;;;;;;:::i;17991:341::-;18282:6;18276:13;18267:6;18263:2;18259:15;18252:38;17745:602;-1:-1:-1;;;;;;17872:55:0;-1:-1:-1;;;17872:55:0;;-1:-1:-1;17865:62:0;;17709:693;-1:-1:-1;18386:4:0;17566:843;;;;;;:::o;1087:124::-;1145:7;1178:1;1173;:6;;1165:15;;;;;;1198:5;1202:1;1198;:5;:::i;:::-;1191:12;1087:124;-1:-1:-1;;;1087:124:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:257::-;5224:3;5262:5;5256:12;5289:6;5284:3;5277:19;5305:63;5361:6;5354:4;5349:3;5345:14;5338:4;5331:5;5327:16;5305:63;:::i;:::-;5422:2;5401:15;-1:-1:-1;;5397:29:1;5388:39;;;;5429:4;5384:50;;5232:208;-1:-1:-1;;5232:208:1:o;5445:470::-;5624:3;5662:6;5656:13;5678:53;5724:6;5719:3;5712:4;5704:6;5700:17;5678:53;:::i;:::-;5794:13;;5753:16;;;;5816:57;5794:13;5753:16;5850:4;5838:17;;5816:57;:::i;:::-;5889:20;;5632:283;-1:-1:-1;;;;5632:283:1:o;6128:488::-;-1:-1:-1;;;;;6397:15:1;;;6379:34;;6449:15;;6444:2;6429:18;;6422:43;6496:2;6481:18;;6474:34;;;6544:3;6539:2;6524:18;;6517:31;;;6322:4;;6565:45;;6590:19;;6582:6;6565:45;:::i;:::-;6557:53;6331:285;-1:-1:-1;;;;;;6331:285:1:o;6621:635::-;6792:2;6844:21;;;6914:13;;6817:18;;;6936:22;;;6763:4;;6792:2;7015:15;;;;6989:2;6974:18;;;6763:4;7061:169;7075:6;7072:1;7069:13;7061:169;;;7136:13;;7124:26;;7205:15;;;;7170:12;;;;7097:1;7090:9;7061:169;;;-1:-1:-1;7247:3:1;;6772:484;-1:-1:-1;;;;;;6772:484:1:o;7898:219::-;8047:2;8036:9;8029:21;8010:4;8067:44;8107:2;8096:9;8092:18;8084:6;8067:44;:::i;8538:414::-;8740:2;8722:21;;;8779:2;8759:18;;;8752:30;8818:34;8813:2;8798:18;;8791:62;-1:-1:-1;;;8884:2:1;8869:18;;8862:48;8942:3;8927:19;;8712:240::o;10431:407::-;10633:2;10615:21;;;10672:2;10652:18;;;10645:30;10711:34;10706:2;10691:18;;10684:62;-1:-1:-1;;;10777:2:1;10762:18;;10755:41;10828:3;10813:19;;10605:233::o;17875:413::-;18077:2;18059:21;;;18116:2;18096:18;;;18089:30;18155:34;18150:2;18135:18;;18128:62;-1:-1:-1;;;18221:2:1;18206:18;;18199:47;18278:3;18263:19;;18049:239::o;19609:128::-;19649:3;19680:1;19676:6;19673:1;19670:13;19667:2;;;19686:18;;:::i;:::-;-1:-1:-1;19722:9:1;;19657:80::o;19742:120::-;19782:1;19808;19798:2;;19813:18;;:::i;:::-;-1:-1:-1;19847:9:1;;19788:74::o;19867:168::-;19907:7;19973:1;19969;19965:6;19961:14;19958:1;19955:21;19950:1;19943:9;19936:17;19932:45;19929:2;;;19980:18;;:::i;:::-;-1:-1:-1;20020:9:1;;19919:116::o;20040:125::-;20080:4;20108:1;20105;20102:8;20099:2;;;20113:18;;:::i;:::-;-1:-1:-1;20150:9:1;;20089:76::o;20170:258::-;20242:1;20252:113;20266:6;20263:1;20260:13;20252:113;;;20342:11;;;20336:18;20323:11;;;20316:39;20288:2;20281:10;20252:113;;;20383:6;20380:1;20377:13;20374:2;;;-1:-1:-1;;20418:1:1;20400:16;;20393:27;20223:205::o;20433:380::-;20512:1;20508:12;;;;20555;;;20576:2;;20630:4;20622:6;20618:17;20608:27;;20576:2;20683;20675:6;20672:14;20652:18;20649:38;20646:2;;;20729:10;20724:3;20720:20;20717:1;20710:31;20764:4;20761:1;20754:15;20792:4;20789:1;20782:15;20646:2;;20488:325;;;:::o;20818:135::-;20857:3;-1:-1:-1;;20878:17:1;;20875:2;;;20898:18;;:::i;:::-;-1:-1:-1;20945:1:1;20934:13;;20865:88::o;20958:112::-;20990:1;21016;21006:2;;21021:18;;:::i;:::-;-1:-1:-1;21055:9:1;;20996:74::o;21075:127::-;21136:10;21131:3;21127:20;21124:1;21117:31;21167:4;21164:1;21157:15;21191:4;21188:1;21181:15;21207:127;21268:10;21263:3;21259:20;21256:1;21249:31;21299:4;21296:1;21289:15;21323:4;21320:1;21313:15;21339:127;21400:10;21395:3;21391:20;21388:1;21381:31;21431:4;21428:1;21421:15;21455:4;21452:1;21445:15;21471:131;-1:-1:-1;;;;;;21545:32:1;;21535:43;;21525:2;;21592:1;21589;21582:12

Swarm Source

ipfs://64248f6ed96c8992f1d89f9cc18dee6f6838f397b8c453cf374da92ab9577c66
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.