ETH Price: $3,719.51 (-5.41%)

Contract

0x56681458E00CafE1206313D2D033946f458FDEfD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Set Approval For...213670742024-12-09 19:36:1119 hrs ago1733772971IN
COOLDOGS: COOLDOGS Token
0 ETH0.0013269928.71159872
Set Approval For...212797942024-11-27 14:49:4712 days ago1732718987IN
COOLDOGS: COOLDOGS Token
0 ETH0.0008888719.26721221
Set Approval For...212417532024-11-22 7:23:1118 days ago1732260191IN
COOLDOGS: COOLDOGS Token
0 ETH0.000208078.59022399
Set Approval For...212069622024-11-17 10:54:5923 days ago1731840899IN
COOLDOGS: COOLDOGS Token
0 ETH0.000418919.08047437
Set Approval For...211514982024-11-09 17:09:5930 days ago1731172199IN
COOLDOGS: COOLDOGS Token
0 ETH0.0006979715.12933372
Set Approval For...209799962024-10-16 18:44:4754 days ago1729104287IN
COOLDOGS: COOLDOGS Token
0 ETH0.0003101912.76188282
Set Approval For...209521732024-10-12 21:22:1158 days ago1728768131IN
COOLDOGS: COOLDOGS Token
0 ETH0.0002570710.61332486
Set Approval For...209008462024-10-05 17:31:4765 days ago1728149507IN
COOLDOGS: COOLDOGS Token
0 ETH0.000111674.59466816
Set Approval For...208127062024-09-23 10:32:2378 days ago1727087543IN
COOLDOGS: COOLDOGS Token
0 ETH0.0009159719.85468857
Set Approval For...207514162024-09-14 21:05:1186 days ago1726347911IN
COOLDOGS: COOLDOGS Token
0 ETH0.000113342.45241107
Set Approval For...207391462024-09-13 3:56:2388 days ago1726199783IN
COOLDOGS: COOLDOGS Token
0 ETH0.000074331.61138812
Set Approval For...207391162024-09-13 3:50:2388 days ago1726199423IN
COOLDOGS: COOLDOGS Token
0 ETH0.000080251.73967715
Set Approval For...206984302024-09-07 11:29:4794 days ago1725708587IN
COOLDOGS: COOLDOGS Token
0 ETH0.000110692.39940741
Set Approval For...206777912024-09-04 14:22:5997 days ago1725459779IN
COOLDOGS: COOLDOGS Token
0 ETH0.000282896.13197713
Set Approval For...206571172024-09-01 17:08:3599 days ago1725210515IN
COOLDOGS: COOLDOGS Token
0 ETH0.000063421.37478052
Safe Transfer Fr...206569512024-09-01 16:35:2399 days ago1725208523IN
COOLDOGS: COOLDOGS Token
0 ETH0.000120390.9864313
Set Approval For...206140482024-08-26 16:45:59105 days ago1724690759IN
COOLDOGS: COOLDOGS Token
0 ETH0.000127032.74921252
Set Approval For...205497872024-08-17 17:18:35114 days ago1723915115IN
COOLDOGS: COOLDOGS Token
0 ETH0.000090531.96146884
Set Approval For...205304032024-08-15 0:18:59117 days ago1723681139IN
COOLDOGS: COOLDOGS Token
0 ETH0.00012522.71387586
Set Approval For...205077372024-08-11 20:24:11120 days ago1723407851IN
COOLDOGS: COOLDOGS Token
0 ETH0.000198964.30611643
Set Approval For...205077242024-08-11 20:21:35120 days ago1723407695IN
COOLDOGS: COOLDOGS Token
0 ETH0.000201934.37029263
Set Approval For...203954542024-07-27 4:19:35136 days ago1722053975IN
COOLDOGS: COOLDOGS Token
0 ETH0.000029521.21477696
Set Approval For...202877522024-07-12 3:30:23151 days ago1720755023IN
COOLDOGS: COOLDOGS Token
0 ETH0.00014293.09274151
Set Approval For...202629242024-07-08 16:16:11154 days ago1720455371IN
COOLDOGS: COOLDOGS Token
0 ETH0.00034317.43715575
Set Approval For...202550832024-07-07 13:58:47156 days ago1720360727IN
COOLDOGS: COOLDOGS Token
0 ETH0.000106672.31223588
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.15 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.25 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.05 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.15 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.15 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.1 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.25 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.1 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.05 ETH
136297282021-11-17 0:21:391119 days ago1637108499
COOLDOGS: COOLDOGS Token
0.5 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.01 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.01 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.15 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.25 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.1 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.5 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.05 ETH
136297272021-11-17 0:21:061119 days ago1637108466
COOLDOGS: COOLDOGS Token
0.3 ETH
136297262021-11-17 0:20:421119 days ago1637108442
COOLDOGS: COOLDOGS Token
0.1 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
COOLDOGS

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: smart.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import 'db.sol';
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 Deposit(address indexed account, uint indexed amount);
    event Withdraw(address indexed account, uint indexed amount);
    event NewBid(address indexed bidder, uint indexed amount, uint indexed tokenId);
    event Trade(address indexed seller, address indexed buyer, uint indexed tokenId,uint amount);
    event SellNft(address indexed owner,uint indexed tokenId,uint indexed minPrice);
    event CancelSellNft(address indexed owner,uint indexed tokenId);
    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 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, 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 public _preSaleAddrs;
    string internal baseURI;
    uint internal price = 0.05 ether;
    uint internal presellPrice = 0.05 ether;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;

    uint256 constant MAX_SUPPLY = 5000;
    address public royalty;


    mapping (uint => ForSale) public nftForSale;
    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;
   
    struct ForSale {
        uint nft_uid;
        address owner;
        address bidder;
        uint minValue;
        uint highestBid;
    }
   
    constructor (string memory name_, string memory symbol_,string memory baseURI_,address _royalty) {
        _name = name_;
        _symbol = symbol_;
        baseURI = baseURI_;
        royalty = _royalty;
    }
    

    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];
        delete nftForSale[_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();
        emit CancelSellNft(_msgSender(),_tokenId);
    }
	function _getAddrQuantity(address to) internal virtual returns (uint256 value) {
		return _balances[to];
	}
    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 <=5000, "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 COOLDOGS is ERC721  {
    using SafeMath for uint256;
    using db for address;

    bool private lock = false;
    bool public contractPaused;
    uint256 constant CONTRACT_ROYALTY = 2;//Contract royalty in percent
    
    mapping (address => uint256) public ethBalance;



    constructor() ERC721("COOLDOGS", "COOLDOGS", " http://cooldogs.io/json/" ,address(0xFf156F43db92180d035093fc1775Fe678Bbbc659)) {

        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }
	modifier contains (string memory what, string memory where) {
		bytes memory whatBytes = bytes (what);
		bytes memory whereBytes = bytes (where);

		bool found = false;
		for (uint i = 0; i < whereBytes.length - whatBytes.length; i++) {
			bool flag = true;
			for (uint j = 0; j < whatBytes.length; j++)
				if (whereBytes [i + j] != whatBytes [j]) {
					flag = false;
					break;
				}
			if (flag) {
				found = true;
				break;
			}
		}
		require (found);

		_;
	}

    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 changeRoyaltyAddr(address _newRoyaltyAddr) public returns(bool){
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change royalty address");
        royalty = _newRoyaltyAddr;
        return true;
    }


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

    function toSellNFT(uint tokenId, uint minPrice) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        nftForSale[tokenId] =ForSale(tokenId,_msgSender(),address(0),minPrice,0);
        emit SellNft(_msgSender(),tokenId,minPrice);
        return true;
    }

    function toCancelSaleOfNFT(uint tokenId) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        delete nftForSale[tokenId];
        emit CancelSellNft(_msgSender(),tokenId);
        return true;
    }


    function toMakeBid(uint tokenId) public payable nonReentrant returns(bool){
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(!_isApprovedOrOwner(_msgSender(), tokenId), "The owner can't make bid");
        if (order.bidder == _msgSender()){
            require(msg.value > 0,"Insufficient funds to make bid");
            order.highestBid = order.highestBid.add(msg.value);
        } else{
            require(msg.value >= order.minValue && msg.value > order.highestBid, "Insufficient funds to make bid");
            order.highestBid = msg.value;
            order.bidder = _msgSender();
        }
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        nftForSale[tokenId] = order;
        emit Deposit(_msgSender(),msg.value);
        emit NewBid(_msgSender(),order.highestBid,tokenId);
        return true;
    }

    function toAcceptBid(uint tokenId) public nonReentrant returns(bool){
        require(!contractPaused);
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Only owner or approved can accept the bid");
        require(ethBalance[order.bidder] >= order.highestBid,"Insufficient funds of the bidder balance");
        delete nftForSale[tokenId];
        uint256 total_royalty = order.highestBid / 100 * CONTRACT_ROYALTY;
        ethBalance[order.bidder] = ethBalance[order.bidder].sub(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(total_royalty);
        (bool success, ) = royalty.call{value:total_royalty}("");
        require(success);
        _transfer(order.owner,order.bidder,tokenId);
        emit CancelSellNft(_msgSender(),tokenId);
        emit Trade(_msgSender(),order.bidder,order.highestBid,tokenId);
        emit Transfer(order.owner,order.bidder,tokenId);
        return true;
    }

    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }
 
    function buyNFT(uint quantity)external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
		require(quantity>0, "Quantity must be more than 0");
		require(quantity<11, "Quantity must be less than 11"); 
		if (!_startSale) {
			require (_msgSender().checkAddr(), "The sale hasn't started."); 
			require(_getAddrQuantity(_msgSender())+quantity<=2, "Allowed 2 nft per account on presale");
		} else 
			require(_getAddrQuantity(_msgSender())+quantity<=10, "Allowed 10 nft per account");
        require(tokensSold+quantity <=5000, "The tokens limit has reached.");
        if (_startSale)
            require(msg.value*quantity >= price, "Insufficient funds to purchase.");
        else 
            require(msg.value*quantity >= presellPrice, "Insufficient funds to purchase.");
        (bool success, ) = royalty.call{value:msg.value}("");
        require(success); 
        uint _tokenId;
		for (uint i = 0; i < quantity; i++) {
			_tokenId = tokensSold + 1;
			_mint(_msgSender(), _tokenId);       
		}			
        return (true,_tokenId);
    }

    function withdraw(uint amount) external nonReentrant {
        require(!contractPaused);
        require(amount <= ethBalance[_msgSender()],"Insufficient funds to withdraw.");
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(amount);
        (bool success, ) = msg.sender.call{value:amount}("");
        require(success);
        emit Withdraw(_msgSender(), amount);
    }

    function deposit() external payable {
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        emit Deposit(_msgSender(), msg.value);
    }


}

File 2 of 2: db.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library db {

    function checkAddr(address s) external  pure returns(bool value){ 
		// presale addresses 
		if (s!=address(0x62941F356d3970E8D664DEc2c582Ee2EC3805548) && 
			s!=address(0xDEcE12D4d665Fb56074bC55E570Df6712A55b752) && 
			s!=address(0x150190d0366614235b2C5565d9cAA252B11dD991) && 
			s!=address(0x51788f5368ee42DF50b3C55FcE45922E5F9EdeFa) && 
			s!=address(0xb49E2b3880747dd6A0b1b358ed8E45FAF10ddd8C) && 
			s!=address(0x95518B05380fB6a2e17aF6e9803E9e2A35f4b8C0) && 
			s!=address(0xbeE1d3c370BA866f37e82E1904b99501DD6691c7) && 
			s!=address(0xbE738E69458300681D73DC2ffD70A5a036A92085) && 
			s!=address(0x6327091c07bEE2B0C1a6c8d7264588Ef8eC8630f) && 
			s!=address(0x3b948564D44A2E6dd9c1b91D2dCb2E96E466Dca6) && 
			s!=address(0x81780b4510B14578698A4491387D8a9878435809) && 
			s!=address(0xf9CCF3FA201e8F37D1D97ED49A100263B9341C1C) && 
			s!=address(0xC9eBf230c414230bE5d6E18fe701A4e57b372882) && 
			s!=address(0x7aE8D7E6f91578b65db930B157804F41bc638162) && 
			s!=address(0xc87bc4ACe7686A59a1D74E375f1E317ce63CD674) && 
			s!=address(0x48832ae2f9E1e55D03cE2A9205778dC24e679CE0) && 
			s!=address(0x295b5608733c6A9AA3cb09c1bF8ba0EA20a55241) && 
			s!=address(0x51a6267e133E67f8b6659E2717C0c89b67E8C1b8) && 
			s!=address(0x63F55dbCcEB9eABB160D43F2EE4fBa250B1a4cA7) && 
			s!=address(0x06614468348405A7a33f986b17A1c38e84976838) && 
			s!=address(0xC76d6052cF0c3a398EEBC36024A8b687734f8FeB) && 
			s!=address(0x7Cf05c0d20E07a137B6bDd7609dD7193D6bAa56E) && 
			s!=address(0x049cfB79a2E95AcE64E9daa1515A4D82eCfb0E15) && 
			s!=address(0x87ADd8D1b9c51F48999ea310Dab4aE40d7BF0d74) && 
			s!=address(0x49373c9b31644Bae4Bb62c13e5Fb8Ba237B4256b) && 
			s!=address(0x2cf36532203fe6565Fd12a89a2C2AdbB0bfBf572) && 
			s!=address(0xD9d12559B86A11dA9d248204991b4e2A410E36Ad) && 
			s!=address(0x6cB6f90F9CF02F1099c13Aa962a4a0BE7f6264e3) && 
			s!=address(0xD1e34CBCd7a4758CCF4D28249e8cB13748bAc556) && 
			s!=address(0x8396a60f85bbA2939CD51fa6c8Bc5991245741E7) && 
			s!=address(0xf37C9b5eC24dF24EB004104D78a5Ce49184cfFfc) && 
			s!=address(0x30bb881A96213b4dcA453564E9eEca366F4dB4d4) && 
			s!=address(0xC8FE7A7ACcDBEC1768cB032aBBe42462a482E81b) && 
			s!=address(0x72a4dc78c0C4A2F804eC467cbD6c3f89063cE62a) && 
			s!=address(0x5df4F4708A4973e80397d54cA7BFAC85a576c6A9) && 
			s!=address(0xF710CB8b6e445272300a95991C7a60fEeB95Fa7C) && 
			s!=address(0x4ee71A9e87968819299aC8a58eC2a7EefA510EC7) && 
			s!=address(0x650C29081b64702807C08D9Caad8cf54d6BA0d22) && 
			s!=address(0xdDC9FD90FC8D5a5692455480d47Ce1C6aEe8B5c2) && 
			s!=address(0x7949ef5B6FfEE4344Ad67Ec6BdAef53Ef9E8C6Bf) && 
			s!=address(0xB53D91d342b020C7CC25367EdBf8e96D6C5E4c6F) && 
			s!=address(0xD7DFaBD435c7A446F2F045305144f0f003352a24) && 
			s!=address(0xa3f7FE5f82eA5DB2e8F163AfB99494b3f0c278a6) && 
			s!=address(0x9C2821F70cfef1bB0E69A1d6FC0c1a3E074c880e) && 
			s!=address(0xdD80e1a7527e860B5541580b219Bb82e6CDA2D2d) && 
			s!=address(0x2397Ad315FaCA9c593C0571C527FAbdfd6b9723C) && 
			s!=address(0xF7161CFe40D4B21D9B6F87C19d9Ff424D8675d3E) && 
			s!=address(0xE42bCC958fA7b7CC2457A96378B438F7f083150e) && 
			s!=address(0x0E9387d15170732d7a487686CD3584929f0D8a5c) && 
			s!=address(0x7B26DC03A87b06A13F7a5C6e302c34dbB48F1fEa) && 
			s!=address(0x69a1C8BAf95EE4A36dCd6E9BCdaAE42B055D4e82) && 
			s!=address(0xaEC5065f734B0D68164db2e8fC2C00286da29E9f) && 
			s!=address(0xfBE6006A193560150F63902B7C8B69fa8739Bc95) && 
			s!=address(0xF94FE01dd17116C09bF7076b2DEe0FC114ba047C) && 
			s!=address(0x4b1C90314de121236D1F196268d8e542Dc6701cb) && 
			s!=address(0x01253e208f245BDF3bfA3BfDee025FDE9E70c305) && 
			s!=address(0x36Ade9BAe1ec913244713A2983Df1b63Cf7C5Ea8) && 
			s!=address(0xf1F62C800C5e42F028F82518a9FBd803d57D2762) && 
			s!=address(0x0D626f36A6cEcfFd69B8C34f30dAD2CE8Fa59847) && 
			s!=address(0x3Cb0893587298AD4385395e999420Cc99c24c3Cd) && 
			s!=address(0x46d81a39f3D94BfaC36c0121855Ca1f71B1b2D79) && 
			s!=address(0x951caE59AB0feEd5aeEEB56C6d5e1aB07408521c) && 
			s!=address(0xe78B4EFF96DD4cA9e49995335532410f69394cfB) && 
			s!=address(0x8047c7FD3e9d36E6f50edED32013D6424c61A0E3) && 
			s!=address(0xF063718bC448EFC9399Aa7D7D256f3B3b4b8680a) && 
			s!=address(0xEbB7Eb5046Fa95590233688a61f5A8ca0B092DA3) && 
			s!=address(0xB811693939bB37971AF154A5B5eE723d98B309a8) && 
			s!=address(0xD62b8C5A5A5f8AbD0897500BE0a715e3c08a4D69) && 
			s!=address(0x24FB52d2b43Fb1a179B7b4FF80A2e95b00D0e324) && 
			s!=address(0x5980b54470993afa71eDcFDAdAc8D7ED35fAFD8B) && 
			s!=address(0x1d01e2010C7018AA9A10Ee81bEb8e88F212a1209) && 
			s!=address(0x027BfFb890ddB54c2a9B58CFf96A72b72247058f) && 
			s!=address(0xFE0942fDB0aD40b7d2a3198A5844E31b3E54e816) && 
			s!=address(0xa32ea9FbDE477E277e9B00a15a4293EB5C4a0307) && 
			s!=address(0xDC48157248d0020DF45AEe2e0BD1E25590038a88) && 
			s!=address(0x7781edF9C76011679A579E81bD3Ff76653f1d2bb) && 
			s!=address(0x4543e5710338BF6E514258ae7f4033eA29C700BD) && 
			s!=address(0xe3b117587f570bF2d5Aead986c66E018dc5A473C) && 
			s!=address(0x6A9edaD27697f4CCF95a35CB6c25028971F06Ca9) && 
			s!=address(0x522B97145BCcE5c97c8e39CFFb3e73a55E0dEA0E) && 
			s!=address(0x8cA864a2eb9a72E697b2C07226AD1a796304D478) && 
			s!=address(0x42D8b58F0Cd977296C5d702d1aF81f334332e662) && 
			s!=address(0x7BAEE0d22FEea9696aF7a4ab7858A6e48e44dD0b) &&  
			s!=address(0x008e118E87c4A19411C64165502460391A9001C8) && 
			s!=address(0x00b6F8f1ee0241075799AA7474C70304D8FA0814) && 
			s!=address(0x012722E98795156F1c912a7784C9310a3B5B1aE4) && 
			s!=address(0x02F76CAF3093EBf3F9733e7eD75fFa3876455D40) && 
			s!=address(0x0a80FA1FaF7D66279F1449200F5B733e7CC82807) && 
			s!=address(0x0b2Ddc7248a62C54CC3b62A9eb758F3fDC6f89e9) && 
			s!=address(0x0ffE3E67B691934C5a7997884BAb9aF5a1948474) && 
			s!=address(0x1711FE4773F22aD816102c89F7d5Cc4Dc8aCb83B) && 
			s!=address(0x1c6d01FA2CD66e0847AD1696415C16017a73c63D) && 
			s!=address(0x20A302483A9BA8778487376471FEb3D591642dC3) && 
			s!=address(0x21611D7EB7E4e7444DCFbA5E66F7d9262a87885b) && 
			s!=address(0x2657344889F180A85a845fA2b04ECD5637508038) && 
			s!=address(0x29c038d26772DBAEB958A76BBCdD6A82BC98E5dE) && 
			s!=address(0x2A20ee2498d606554b08A386895D92FA2A2D6AC3) && 
			s!=address(0x2cfd8c5C627955728EF40A508F8E9B90D67FFC85) && 
			s!=address(0x2F21B06d91075E3a58F01E7eCe81EA54b604F335) && 
			s!=address(0x30838292AF0549A458cC99E614B6Cd0061DbCdaD) && 
			s!=address(0x320E73e1238b95E5Eb54C3FdBebF279F36a06714) && 
			s!=address(0x32a53f83CEe2474daCA43E51e9ea73744F25137b) && 
			s!=address(0x407EcA5B31B764C35B4fCda41C25fD8fF4882824) && 
			s!=address(0x40CEa220dDf167a4BD37116B1eFC2468CE1450F9) && 
			s!=address(0x4901Ff8F478d2CA81a2c55eA442C9BF939E120dB) && 
			s!=address(0x497fE20C94D4Ba9247582462d6dcB945B160Fd20) && 
			s!=address(0x4BBC3eB245d60614DfCB0c3ccb757377b79C6bA4) && 
			s!=address(0x51F159A4a0F00Ec122f7ff424D95cE043A646337) && 
			s!=address(0x5546498Ee22d1F3cBeCEF815176fB292598a67C1) && 
			s!=address(0x55c6794647b9208F69413b8E0ABfFF00f4023ca4) && 
			s!=address(0x588f288Eb412E00b712C6AC18cD95BA1eB62fec3) && 
			s!=address(0x5d988D6FfCafb723c661f2b6e7FAD440498634D7) && 
			s!=address(0x5Ef84C9204c2888DB12fc2B93F9a352c7e597a37) && 
			s!=address(0x625BAb079ccfDd3e0A75BDf8061479aDb00DBDae) && 
			s!=address(0x657E0D866c8c99B542b240aAE931BB42c77C3Ad2) && 
			s!=address(0x65aa9d769eDbcc170acEd9dcEEd464f19ED755a7) && 
			s!=address(0x664507fA5165Db13ef5e6500B27b5D06F9D107e0) && 
			s!=address(0x6792Bbd1d13F5102351f9F0b6C6d1c10cf318Ac1) && 
			s!=address(0x6859aA234fF7cfd6BD88809D45cdfF437c173E45) && 
			s!=address(0x6a4a7756438960dE9D202f94ba35755EeB1C93a2) && 
			s!=address(0x6e630F3A619F25E3c6cBa09B0d95569a79f7ca3B) && 
			s!=address(0x6EFD6e546FD3f069bD071e5080A1D0310AcA58E1) && 
			s!=address(0x71E70A39fC2600b952036c99D858C7030cFf384C) && 
			s!=address(0x72638D20eA0a376f1d97f4481A3C442ECef1c692) && 
			s!=address(0x76eE43FdcF297AAf373e1981B9F9d4470EdeB71B) && 
			s!=address(0x78292152317601a3Fd0307505a22e7DD35eAc738) && 
			s!=address(0x7844C5aa7f365fD3394A3Fc933689440da39Fd07) && 
			s!=address(0x7C389C84e787B516a91cfF847A8f2bc39Ca4aeB7) && 
			s!=address(0x7E512EABBC08fad61Fa3b937A925DaD5E3269D30) && 
			s!=address(0x82019e13bAE91cA97F66B65C98b9E3B7ec64F1A1) && 
			s!=address(0x84bf627c6C0d04Fb8B2BCa0e644352fB9E51Bfb2) && 
			s!=address(0x856aA36ec81E43EB8FF7e5603BDFeEA18E87cdA9) && 
			s!=address(0x86cDaA9162ca7056ea65Bc49780d2D24E2037694) && 
			s!=address(0x8b500A85a6F6702B25706d58fF173BAe0e217f8B) && 
			s!=address(0x905A89D4409f262323f1593608402a6bdb8C3986) && 
			s!=address(0x96d22edD641F0a63B1026D22cd884B744f510486) && 
			s!=address(0x96D7333ed4dc517752919Ea21556835bA825b114) && 
			s!=address(0x9724caa5076CB2825A7b62Bd5Cf124d0050cc601) && 
			s!=address(0x9840aECDcE9A75711942922357EB70eC44DF015F) && 
			s!=address(0x9eCAf8624A7855D8D79388C63a831535663b5b75) && 
			s!=address(0x9F94200F0cAfbE72Fe7DBc43C9D659182D041a8B) && 
			s!=address(0xa2d71F9985DBa0cc0ec7F85B0562121fD99FEBDd) && 
			s!=address(0xAc91acC8d732F5B5E9374Fc9C42Efc4Ee6C63838) && 
			s!=address(0xB2eEA2FCd3db794BF6bE9d83E0dbfa5492beb39B) && 
			s!=address(0xB5Bc2ba898f952e2e1aac28529e8F1f54f36bf29) && 
			s!=address(0xB7Efcef701470Dd9DA4EC3B29b0B1D67b962A587) && 
			s!=address(0xB8585C597d2733cae2B62F9127371f072347A68C) && 
			s!=address(0xB91279c54007f16f1CE04237daF6f14F1253fBA1) && 
			s!=address(0xbB8411eb37957E798aa32E15caB7360B88cBE184) && 
			s!=address(0xbD9D912D758F6DC2E8e9D2dA53f0Da1705c9ce5D) && 
			s!=address(0xBeCfF2F6213029c53ef93056857Fb58165D73A12) && 
			s!=address(0xC31f799dbc5D61Ee15A1004e342A442532836660) && 
			s!=address(0xc3e013C79C9Af35FEEC4029157495fD9BC9cCc3F) && 
			s!=address(0xc7b5d70c987E39e626101Ba8FC5077EB0Cf782F2) && 
			s!=address(0xC848B03Cd813FdbfdbD4A1b8cA599c1fB6CF4Bc6) && 
			s!=address(0xce3D912Af833155c239a5FA2DEa2Aa05bEe33E51) && 
			s!=address(0xDA22dBd9D226835668A7775cEF01A1eDB7b66296) && 
			s!=address(0xe36A689bC92CD87d071EaA991D7df813F08a976d) && 
			s!=address(0xE598E2D901833FbD858054A3f4141e5251953407) && 
			s!=address(0xEAa5Fb0853b939F7c90c3848B4978f23309588bC) && 
			s!=address(0xeD2578B0bfc65bD43f5126A86b2FdB287F61D228) && 
			s!=address(0xEe7e9B1a7A592a38C466a9fCe0f71E0f3D4003C1) && 
			s!=address(0xF1C745B6b47d634097c78722Be6A8e507F4968F3) && 
			s!=address(0xf24b37a77c085FA40bA794873049fCD92213336C) && 
			s!=address(0xf6934d7F21E914436847703716C34de0A4De326C) && 
			s!=address(0xF8721fA5f901f95F875331f002a1F0402caCF6Dc) && 
			s!=address(0xf8d946c1DB7E3552B0faB941844E179130b6F6b5) && 
			s!=address(0xFacEb8D0445Bb196F0393eb7f9468A0278531ea2) && 
			s!=address(0xFB361809eDc9ecf3a8fA4362022F0f7A8B245c79) && 
			s!=address(0xffE5cF3324F6D30b5A4B61274F51Ff952915b251) && 
			s!=address(0x01B590B256dCb6300fe43FA2c629Dd9fD2838eD4) && 
			s!=address(0x02f92de0395595c1a2342C24235144683096b187) && 
			s!=address(0x031c770F66B54CCCcc1e703A6f926899Ec70f390) && 
			s!=address(0x03908E93b06448a7e0085da96cb739ad63008c16) && 
			s!=address(0x04a35D932601f474770ed8aea93BDcee7b1aC7FD) && 
			s!=address(0x054EAA6D78D284ff0693945f315c471E74d69129) && 
			s!=address(0x05D0Ed66C9bBd3B4db0975ea5cBD9a9d0839c315) && 
			s!=address(0x06a937c2D281EED25a3d48D60cdEc0B3E9e4d575) && 
			s!=address(0x07bB791D63C4ef361A24cA7A7f7efA8f8AD2883f) && 
			s!=address(0x07FAedb084786B55E96019f212c509a9C068Cf1b) && 
			s!=address(0x081df87E63BE4E712487A138Bc56f1f27017fA06) && 
			s!=address(0x08321B282bDC787363779e8370e21fCC1da8EBa6) && 
			s!=address(0x09f2a73d83DEb3817eE2f6fcC3C64D96E74BEf83) && 
			s!=address(0x0BA44d6B6AC0133A8e2c49f20b2f10cA73e27bA4) && 
			s!=address(0x0cAbb682E4c127a78236a5C985b8B5C779C92908) && 
			s!=address(0x0e03B7e6B191c6d5c7C8B1a25153BDe1fb54C14e) && 
			s!=address(0x0ed5468f0a9278637a2eF59c765349001f0D4632) && 
			s!=address(0x0F34E9EC6971eBb89EbAB75e9fd194ac6295a194) && 
			s!=address(0x0f35547CF184D4d65Af5CeD6aE37fE8032F83610) && 
			s!=address(0x0fECE91875D2759E5E6aF28572845b1f29815497) && 
			s!=address(0x104Be7518A497a8924BF2D3dd04f03339E9f3841) && 
			s!=address(0x110D9618F2eb9424B452bBefec1316A4894e15Db) && 
			s!=address(0x11290e5C348568aFa1b70C9F7c430c7d38C233c0) && 
			s!=address(0x11C486e7BF25b8548D8F181420316F01FD43F4a2) && 
			s!=address(0x1208623d08eFC561A62F7FE21e3c934228cBBF35) && 
			s!=address(0x12A24299f317A1C99f36C395Ddd6C2Ac565dFB05) && 
			s!=address(0x1327F35216e3a6785a2943a70de6B159F28809D3) && 
			s!=address(0x14477517688039BfC8D967B4C594C07FFE5690Fb) && 
			s!=address(0x148973230e205A5c58e9607E21d165A9a4E8e807) && 
			s!=address(0x15107cCEbcE6eDEa43965ee448820396dc571A4C) && 
			s!=address(0x151aEd9465b0F079e90037B1cBa3a0A836b8d621) && 
			s!=address(0x154b6Fc1C6FC10b24DE3aC07bb3a1Bf3444fab50) && 
			s!=address(0x1569175D310e5aD02040aFAf606D1Ce62679f0f7) && 
			s!=address(0x185C1672E94676bC90aa9840faaa3A94DB5bd8CD) && 
			s!=address(0x185d2823032D8A79Bf8165779Cc05587dD43E469) && 
			s!=address(0x1985C5F1EAA811d3c8B52d675F9Cf76a91C878A8) && 
			s!=address(0x19e39B0c71A4D6D2b615Bc4B6F6dc36eE7aeb5d3) && 
			s!=address(0x1a826C5a8bc3a6a5056aed3F267A3636B09D459B) && 
			s!=address(0x1BDB705a8a5dF0E4196bAFC9866F3146261594Ff) && 
			s!=address(0x1DD8D91A2af91A092B03D274585E6961F6C1704b) && 
			s!=address(0x1fDb0A405Ef4f269D72902eD58255a96637288d7) && 
			s!=address(0x208280e826d0195aBae7177C9408AD795465e364) && 
			s!=address(0x20a85Ee75AAba83E4df0E6907508ceFb27a2E890) && 
			s!=address(0x21B1eD6e147DF83310b941e9E1BbECEd3AE2c551) && 
			s!=address(0x22d2CAe546704403406C47CAa59A4acbB8233cbD) && 
			s!=address(0x23c688AD61CC6aB22D7490f3f3A77E8B75A3aC0e) && 
			s!=address(0x24907C58e080F2a9d1f31F25d555aa3d5A5E3419) && 
			s!=address(0x24A2353ae06B09135958C41016dA1bf9dc3f0DB0) && 
			s!=address(0x24A43F152Eb878CFEBaE52f7dC5508df33fA4359) && 
			s!=address(0x25c4c714a1977946aA9e5CA7B640F29511365234) && 
			s!=address(0x273BA2E5Fafa997aDCc7eD10e0aF5f7aa18D21D6) && 
			s!=address(0x274bb3954b5d860390Da26a6dDDEd5463E5cDdD8) && 
			s!=address(0x28Cd8e1a610e056f1021fBD7E58b6d7Fef300e75) && 
			s!=address(0x292dfc58F251e74FC5E3FAf56053438991279CD3) && 
			s!=address(0x292f26D4e50602C2acc410e8D5098BA3860277B2) && 
			s!=address(0x2B92376Dc4F1Cd3F7c07ecFC3579354B2f20AbFF) && 
			s!=address(0x2d5679B0E80Cb34442f63a358a8aFd3C396442Ce) && 
			s!=address(0x2Df64009b4b23292CeF57680C576939Aab1dBd45) && 
			s!=address(0x2E196Fbc672d16fd489d8A3af37fe145d25E8b38) && 
			s!=address(0x2EAc72F0eccB2006d434a6F290440760D514dfB9) && 
			s!=address(0x2EEf40759463Bb1c380915DEcc6580fB63dA9550) && 
			s!=address(0x2f8d5bdA4F90aB8b3064D05b8668500Dd23844f3) && 
			s!=address(0x339399B830383C94f76343CBA6d2465BBdEFf4e4) && 
			s!=address(0x33Eda04eC4FDde5fF4DAC7dF59B06AAFD9000B84) && 
			s!=address(0x3470A157e6477265C2c887e19F7Eea2A34288dF1) && 
			s!=address(0x3494C176EEDaA8a060B8d69E0aB6d661E195Ebe2) && 
			s!=address(0x35808843a413347f4452148f37d1CCdd381EC539) && 
			s!=address(0x3738DAd3b76A6Ae608096628ADa698C7d41Fe6CA) && 
			s!=address(0x37B36e823E06e3Df3c59477dd2cd436328f4C899) && 
			s!=address(0x38450D02f5Ba2ce38cF6D544fAb3581447D59B11) && 
			s!=address(0x3C610F624464c4188FdE1d35Ef7d4D7eE69e8a9f) && 
			s!=address(0x3c66Bb9C32954C189D473e80448B54FA3d092554) && 
			s!=address(0x3D17f13eDf45AB2E36C57Fd19Dfaa65d05CD57D8) && 
			s!=address(0x3D382e8ADF46D77e5D90bA0f2B1c59717f953592) && 
			s!=address(0x3d7687d6652E4c1A5a96f1F8A6C7FBd956641b05) && 
			s!=address(0x3Ec7317E0bC2044C2Bb3419748526D68419cf20c) && 
			s!=address(0x3F195104Fa8E17AfdbaE4893E519A0EDe3B39D43) && 
			s!=address(0x3F514F26Bce0929619236FcA44DaB5bde5cE86CB) && 
			s!=address(0x410f888dBEFCD15c5EdA055D4bd4061076F8037e) && 
			s!=address(0x4147C1e9bd0DA8E175b7CA9E744fA2e6002da717) && 
			s!=address(0x41776A401fFCfe99f5F66eEF14FB5bD5bf4bac9c) && 
			s!=address(0x464EA24D56457Fa6495c1D1029E4FC575D10e967) && 
			s!=address(0x468457FCb8eF24f0Ce779708c7525291857Bf98F) && 
			s!=address(0x46cF2845655659F91298F18cD2125F118c20dFC1 ) && 
			s!=address(0x4744adFbfEcb67017eA0670405C11893E71E5C17) && 
			s!=address(0x476a6e11D088813792C4193BbC35Ea346b705c64) && 
			s!=address(0x4796F1916FFc6DF34C4A09CE26320065A37EbA64) && 
			s!=address(0x49c330FcdF0AB5eFdE28f40d72D40c84BC993e73) && 
			s!=address(0x49f6ce00e8f62B6b4c266ffE2bf9461Ce6729D68) && 
			s!=address(0x4a2e56d61c2E44C582Bf925CF5e57312dB99EDB1) && 
			s!=address(0x4b1805d0541D46d3A83a1F1121e2Ce1c97cD4057) && 
			s!=address(0x4d850AD608f6D866E84AD48F9aAE4A71817DBE2B) && 
			s!=address(0x4f57b97C74D7d53F1456a274fCbeAa69549FD77c) && 
			s!=address(0x502f80D68E1dBD11e4ec764c8997fB50677EeFe9) && 
			s!=address(0x524AD7CC31F093eFE8B14BaB7D485B9dEED715b6) && 
			s!=address(0x53a7f54966a6400028fF2ED33c862df20AA68fa1) && 
			s!=address(0x53Ca66292975b530aa3C6B6bcEbdb72F2FC1e2c1) && 
			s!=address(0x545576C9bDbA3A6111d1477dBcc0B60e9cea90E3) && 
			s!=address(0x55E5C1d069Fdc0489fcfCeB0564D29acdBfAF386) && 
			s!=address(0x57f8a1Cb9C586aEA7E107A446EDA8E147E6d2B77) && 
			s!=address(0x591bE8d5268f2F9D6b62a6604D58F325eb7c84BC) && 
			s!=address(0x5cBD976aDB2e04EE387aDfBb6b4178467a9077E0) && 
			s!=address(0x5d056b521427277A7AFfB7A816eE04b113A617F3) && 
			s!=address(0x5d43570C323DD0BD2bf4ed0A0737200C2415315b) && 
			s!=address(0x5Dd0369EAE712785A6aD88c0ca76De557014E01c) && 
			s!=address(0x60759EBe9FC07Bb74EA93DAb59Dc0F8704b8B9E0) && 
			s!=address(0x62DF01dcC3A6776415af2e78733e3738aF73C5E4) && 
			s!=address(0x6305065118DdC86Cd6Dd5d661C73A5A5B5F135f0) && 
			s!=address(0x63C40b529fdcd930eF00d10696Eebbd38a9cFFD9) && 
			s!=address(0x64ACC0C44A5a64e746233fbB6D90c38E2cFA6Ce4) && 
			s!=address(0x65dD4E1b66c5062663fd46033f72E32Ec524df39) && 
			s!=address(0x667B2a94Dd4053508C7440EA1F902694336B9814) && 
			s!=address(0x675247fc01126e7578A5F7D00928d796AE236027) && 
			s!=address(0x67b88bD645bB8B477C77fe9F78e08fFbd265cD38) && 
			s!=address(0x67d7a569dE694C4f0D84A54Fe39D4575AF8987B6) && 
			s!=address(0x6920a39b21Ae906D60cd0E3e2e4Fb0a3f15C2c3A) && 
			s!=address(0x6994b84369a4C1d1B5dcc98abdD91825bfFD1501) && 
			s!=address(0x6A47ccb8CDA284dfDc65142fACc818B4c7aD3080) && 
			s!=address(0x6c2fe0E1e45B7c700031dE851EEAf8e98D6Badc3) && 
			s!=address(0x6c550fbaF83c799Fc141bbD68B7224cDe6Cd991C) && 
			s!=address(0x6fF12939e0E3661bc1f3231719Fd7A5d6bEA717D) && 
			s!=address(0x71d525Eb645EBCE250f6EB8D3D4fcAb1781cC202) && 
			s!=address(0x7213bDEEeCE54a882eA253441c320718e5af06DF) && 
			s!=address(0x72d693E50C7F66eA3CE4f3Acd5Fe43aB919933CC) && 
			s!=address(0x730Cad17975ADdA580aAe2344aa0b0562aBFD320) && 
			s!=address(0x743427b10A4f9Cc62Ef3c2a1837c9332b1e10639) && 
			s!=address(0x75fF10F3c656a3BfB828B6e17Fe8ed9CE67ffc95) && 
			s!=address(0x761F237533E71d3A8F299f7C32C620323a6B1c7a) && 
			s!=address(0x769FA0b91AB0866d79Fd2528bf2D149d4F3332E7) && 
			s!=address(0x76b44b78701e599c71258C2514Cd2f996eBe2ab4) && 
			s!=address(0x76B56bEC13cf020264Eea59A5d50E4871aE082C6) && 
			s!=address(0x76D0AD6863b627F5786E7C6d17BC67426A9a2787) && 
			s!=address(0x77Ea512c0ee5E7b0A62D0712479Cf4cCF09cD81a) && 
			s!=address(0x7865Cd0fe77ca780218a662f9Cd3276328741eDC) && 
			s!=address(0x78E9F69edF35Bf133738B6d27D0D01ceB07B7414) && 
			s!=address(0x7934f9f598203e1EE489C3928EAb1650F8d912DB) && 
			s!=address(0x7a4d4F56Edd2B16AD67c3fe164479B16b46c29Fa) && 
			s!=address(0x7B406Fa711451dE9E34D8Bb76c7c2D786e92047a) && 
			s!=address(0x7b6ce775088900659381cE8Fc4f3a7791Ee867a0) && 
			s!=address(0x7d23ab0cA7D69863c67911f46B26d0d1D24BeaA3) && 
			s!=address(0x7e68718495C5a67FfB263f55A68570145011bCEf) && 
			s!=address(0x7ef58d7DBB85B1f7C23F5ca23e4e28F61E8AE364) && 
			s!=address(0x7F4f8aC04E3E274D8f0501E7B8CF2093e9d0Ed4b) && 
			s!=address(0x7f53A0DE026BfB9f02A200369cB2f272462d68E9) && 
			s!=address(0x8101BD115b21659A83274d993fb3F378ca13aE1A) && 
			s!=address(0x81EdC497f6a4b28349B05039D482BF85cf1902C5) && 
			s!=address(0x821f6561A8f294f956EeEa1ECec116ead2dad520) && 
			s!=address(0x827bF5006a21275919879182c8Fb5F7287C1dBB4) && 
			s!=address(0x82e8F6b045ca3A20569d3342e25f49bE65CDd246) && 
			s!=address(0x82Fc65218e75Db6C4B222620E6e1Fab2eE2bBF73) && 
			s!=address(0x8330Adb145E95F5a922f48303F102bcE3Bd974Ef) && 
			s!=address(0x83cF78B341fCbc6ABdf6699AFBA8825aa8e6AA07) && 
			s!=address(0x847240ED317FB564614800Bd04E4074C3C7f71fE) && 
			s!=address(0x853CA50Ad25f26Fe7ABAac444D476CcdD81986da) && 
			s!=address(0x85a5Dd7D3b2C212D3647492683681a40b997401e) && 
			s!=address(0x85F79da171b8dC2ccaD33af134a3718E1F8f20CF) && 
			s!=address(0x8689b06Fc46BC46AE799F5e40Df0979FA42d65e6) && 
			s!=address(0x8770fE5c7d7789E9F24F0fd7135724AE01C4B284) && 
			s!=address(0x87B23553aFfAFe941715C2387f221f660d84B394) && 
			s!=address(0x89388AF2C0D01596dC60cb2C00Ce8588A5224C6F) && 
			s!=address(0x8a2f4B38431a3653Fc15A12F43D04ac4411eAaDb) && 
			s!=address(0x8a5393e6217A0fEB58F4eE49cB9625CF73Ff31f7) && 
			s!=address(0x8abedC69fa1cCc5eCe34D958dbD8aF8a4a655005) && 
			s!=address(0x8BE73D367c6FE787c0484259057eA9d3E3AE66C9) && 
			s!=address(0x8BF271f7416fd1ea6C387bF2A19a73Bd79C17E24) && 
			s!=address(0x8c6fDB5926e31994C9372f5907508b36Aca500B6) && 
			s!=address(0x8Ed46E96Fde6F65aCd7e1230b4274E3300402705) && 
			s!=address(0x8F0366B99a4B4db5C6E0BAa04813c0f5d7187B28) && 
			s!=address(0x8fF49f9f637A3e81157359EeecC57FA13b251c24) && 
			s!=address(0x9145d1e6da3e8C83428e6c0321650F135B8cdf66) && 
			s!=address(0x9222079fF6B8eC4b7B21Dd749D43296795f54DD7) && 
			s!=address(0x9271307799Ee65E4b4544fD76Ec18035834eBEf0) && 
			s!=address(0x92b38F3F6B0fE2A0521872512ec430991F0cAf94) && 
			s!=address(0x94fF1e7d124c10126A5133E389deEcdAC6185590) && 
			s!=address(0x9557a61154D53Fec5ac23Ee1DA5922D5a013506F) && 
			s!=address(0x9605ae8D4FC9F2Cf5af913983b80636e414473F7) && 
			s!=address(0x96F9F7ae1747d815d2FC3190A11342947f8a43c0) && 
			s!=address(0x97842c57cB662f8D125d8268D2CA8D276bA18621) && 
			s!=address(0x98b30Efa44D7a389E5e5A68bfa2CA2Ee84C3b87e) && 
			s!=address(0x99e763eE6f480C9876714E2eb3aA8D29e860fd2F) && 
			s!=address(0x9a4c681EA4E110179F978ceDBaF9FD5A45d04026) && 
			s!=address(0x9a837c9233BB02B44f60BF99bc14Bbf6223069B8) && 
			s!=address(0x9aF16a230256be8B8155765446f05Ac3054EEa46) && 
			s!=address(0x9Edd069aCcf979F744CE3FBBebf54507eAD29a21) && 
			s!=address(0x9F59e82Cc1b20a590A5dD21f2cc1142Edd5ebf6C) && 
			s!=address(0x9Fe4e32ffE575688b0A37909e7ADEBb27Ea7EEaC) && 
			s!=address(0xA04B2C0bc90498f131EaE058Aa74053d1D93b25E) && 
			s!=address(0xA08955e83C72e405A0909Da23988700FBf56343A) && 
			s!=address(0xa0a7b66706b7f5c178AE49486a1C98B32670C038) && 
			s!=address(0xa1C4Afa3b6d72e8A111f05A80e0EFeBbfFbFade6) && 
			s!=address(0xa2EB02Eaf64634324d4E8C7BEB1bA3b455DfCe2F) && 
			s!=address(0xA679298D68bF7e539c0a4785393e7B1d61015F10) && 
			s!=address(0xa94783af0f03CD8287B8027ca6D8D7c093cCCede) && 
			s!=address(0xAb3034c66c30a11371E7BC05d2f2b16f8BECC110) && 
			s!=address(0xaB7E7606119F1Ea26BdE6753B34CD63726B66D45) && 
			s!=address(0xAbcAd3F50cCDC9f667f30B9D79C3AeC5bBbF09B6) && 
			s!=address(0xAC8324d090e0d0401C33E3Dba58B5187B89b90D3) && 
			s!=address(0xAcbb228856F194aa5f7001525211c22f097C75Cc) && 
			s!=address(0xadeB7F8E7367559A6b0Ed61dC840D1D1938D1366) && 
			s!=address(0xAF0b1E5725b3192A9391d396c8B18bc98330BB7b) && 
			s!=address(0xAfFC626f5BA2056a53a837f9EaCe6E1c773aE9FC) && 
			s!=address(0xB01FE649B35872799a957d32d02a3103CE019B60) && 
			s!=address(0xB1A1Ac7E089de6D9B8f302717E937889611563EA) && 
			s!=address(0xb448a8718cF8edF6471DEc18fF614E11Cc5e7956) && 
			s!=address(0xb5909905fC5aA86813Ff5AeAaEA3B9952beE55d0) && 
			s!=address(0xB75959df7B0dD6F9dfEa69b3e1661E7b07B79600) && 
			s!=address(0xB75E81915d04527dD49c78eC27D7E063D7943573) && 
			s!=address(0xB7f7De2E42f0c849fE56c1bf7aAf0947C7713D38) && 
			s!=address(0xB89A152b0dCa5602148eaFACeE83A4489FdC4cE1) && 
			s!=address(0xB8E75Ec8021759919819240d62ed89028f3e4B9D) && 
			s!=address(0xB8Ee317D6A07B5f236A3049C74C13aE10370C932) && 
			s!=address(0xB96E7518F7fecE81f02B3Cf164172B7BF9d189F5) && 
			s!=address(0xbBE54ABee26E72677285593B22E4F645073B7C89) && 
			s!=address(0xbca5378d727b63A14016280aFf47bCf710104d78) && 
			s!=address(0xBCc3F08078E4888e4c2227f363E5EBb8E86DE3Bb) && 
			s!=address(0xbd3014d8623bB2578aD6313E2a9bD50B1E71021A) && 
			s!=address(0xbE264cC36eb3cfAd71fa269f6b4960586393135F) && 
			s!=address(0xBE2a7aa090775508903a7fE6eC52b7bb42Eb25aD) && 
			s!=address(0xbF661fD2b1c045409664A31129789C05384a7934) && 
			s!=address(0xc33C12E94E8c8463365B413a60324fe9090c520D) && 
			s!=address(0xc34E1e7ae15410B37Db674955335E8Fd722cb3e6) && 
			s!=address(0xc3f5B8ccc8f0CFB4BcF6f1778Ed0824Aca9e523E) && 
			s!=address(0xc41936124FAa6291379Da3472E33e5bA8387182a) && 
			s!=address(0xC454259dAA76b9629cCF1cd59630Cfd81A3D35E6) && 
			s!=address(0xC5889BBF35ca6EA47e086218a6F0842A17e64A46) && 
			s!=address(0xC59f9c3035E1d3Cd079b6d4971a49bC3f07B2a86) && 
			s!=address(0xC5BAebc9e5b4ffc840b283a70F6227dfa854c818) && 
			s!=address(0xc5e6B199736F165727A3c15C97c37AB2fCBf4107) && 
			s!=address(0xC60D30EbF1880DA246878919bE65488Bc19C5089) && 
			s!=address(0xc80e53A499CBdFFC4a748DE147970449437CE7f1) && 
			s!=address(0xca4f68E7F380BA2A3C1679B226A245e69F555544) && 
			s!=address(0xcB675F77847c33F980Ed76bb31C89b01D20461DA) && 
			s!=address(0xcB9bf18B2cc4Cbcc8ed20C7559F184579F106a0A) && 
			s!=address(0xCBb7C055b59F9f58d4a3688bCF6b90BC02C70794) && 
			s!=address(0xCbdE38eC5A7DEA3526B6209010c64B44Ee91b6c1) && 
			s!=address(0xccFAa8e103D11c29184dce67914A003B515Cb82C) && 
			s!=address(0xCDA8de8824A2E99Ae8ce2095d43c8a405845Ef71) && 
			s!=address(0xce796BEC9094b9f7Ab8A9A4113F4E1A8118fe8D4) && 
			s!=address(0xCeA0A13a1dE593Dd5F793d825F06EE8Ad0926555) && 
			s!=address(0xcF845Ac969829c55B7Bc2A1a709321727bC6b96f) && 
			s!=address(0xcFBf1a748047064E31Da1B0b41cDDc15807Ac35c) && 
			s!=address(0xD24907026161BF311F00cFB7D6970b9a399C3897) && 
			s!=address(0xD3245F939b8235D13b7d15E195CE5BB95A45Ec72) && 
			s!=address(0xd4745B170DeDe5eF451D46Fce6A111eE41f4047f) && 
			s!=address(0xD47F33be9799E1E7219752a5D87E5358311cEd04) && 
			s!=address(0xD492c4971eF568F33a1255a8B346f572ba65173b) && 
			s!=address(0xD59dCF7A9a48F2711eDbD7cF4B06a6b1074da605) && 
			s!=address(0xd886Cb4Ce818566F2e7932F32fC16BfE7005acC7) && 
			s!=address(0xdABe12325B3b39983CA631E6dB0c3Ebaaee72322) && 
			s!=address(0xDB59a2A410fcD72CB64724389Fd8Ad20A4132Da1) && 
			s!=address(0xdb7D1141C3BE4525026B257bE0e103b0DE8f833f) && 
			s!=address(0xDF4f13CEb3215f39f602744284aB598AeA43CcBd) && 
			s!=address(0xe2Ce8DB581121Ca6Bd6b88d71c85d9027d87FB98) && 
			s!=address(0xe5919152A8880Ba3F39A1b8787B82261bBde4471) && 
			s!=address(0xe6629a19Cd7175f50A2e8d4f8cD2c23f4ea304df) && 
			s!=address(0xE8639EE410d4F36e58d318b22Ce4E0BceCB1B018) && 
			s!=address(0xe98fF2db3DC76984eC408Ec4113eCfE83eAF715F) && 
			s!=address(0xe99B7D1684B9EA62028A0220E7d5866f603Fb7f4) && 
			s!=address(0xea229F1F946Fd28A9C706f5A44dfA8011869dd10) && 
			s!=address(0xea3b47474f12D12425cb5F101BcDFa6ecF746b3C) && 
			s!=address(0xeb86F7115EBa0469160749ae4268740bCc298727) && 
			s!=address(0xed4EBBA244ffb2B60693C7964605e8499Ef7EBF9) && 
			s!=address(0xEd9D7bD7F166ED5C6aA26f3d86DBA5b5b52EB3B8) && 
			s!=address(0xeE022D70cb67C5a351b7c21b636c6f68AB9C9a5B) && 
			s!=address(0xEEd2a5Fd7B8B2142f8A0faB770F7Ed1dE3f2Ed64) && 
			s!=address(0xEeE1b7B4Ae1516D68d8C154efD803B4601A59Be4) && 
			s!=address(0xf20E9BEd64Be6E697899349a0c7BCDC40a572d72) && 
			s!=address(0xF237ebc4BC03019Bb9Ecf165d5D5031aE1eF2089) && 
			s!=address(0xF43de81B287ffDBa8889CBE84020eC39EC5cd0e8) && 
			s!=address(0xF463B62e9463e3b8F42B559e371946623C1EB929) && 
			s!=address(0xF653cFa85EACd26ad8b9EcaBbfADEE52e8D9fa72) && 
			s!=address(0xf7321Cb3Ab5EaD1C78187380D89c3c6Afb492C84) && 
			s!=address(0xf757F66DcbCa866D18819fA628233D1656f89945) && 
			s!=address(0xF8887BBe234A1AFdb50aE59CBdcA8A3EBa0F676c) && 
			s!=address(0xF8b2c5aFE178Af7764D47b33F57DCf5F99936983) && 
			s!=address(0xf941F9b6A5ad002C1f40e09510d6a298B0880651) && 
			s!=address(0xfA764a17C9cCDab7154f74Cd97Be852e9581744e) && 
			s!=address(0xfAF047bEA1bFd29b41c2630Be11BF93bdA6731aF) && 
			s!=address(0xFb4A20c1447E8DBD204e83338994B55b26941cA2) && 
			s!=address(0xFB5dA9AAB03806353687010E9A5623b448F555F4) && 
			s!=address(0xFD974Ad2688C552157E339769183318201cF68fc) && 
			s!=address(0xfdc79905818Aa8e0ff637c2627C98B1E8B5A54b5) && 
			s!=address(0xfeAB7fca2182F1c454E889162be9d33123CB1832) && 
			s!=address(0xFD892902cE58C4fe0e5289d19E639F21C9c886Ab) && 
			s!=address(0xB273b47a788aa305C5C65Fa6B56159A4d306d788) && 
			s!=address(0x206a93A0652eb6B76300AbE0F2245B43EceD778c) && 
			s!=address(0x3edeBcCF7462dD6Bbdb999Ca200bF4D074B15aE1) && 
			s!=address(0xe3bFE976072CBD7c6b591b0C04375B4AA158551e) && 
			s!=address(0x5409b21Ddb1521DC0644CFaFaE1557a2588D5207) && 
			s!=address(0xAd7d6708EaEcf517567236f7c01173BF82102863) && 
			s!=address(0x31A3576E1b72607953f32365344657B3dad9719C) && 
			s!=address(0xAC26Cd188d21695994f7E85b2B310BDE7dC564dd) && 
			s!=address(0xCB8634CA19f7943BF37CE6C55021CBD303F0B368) && 
			s!=address(0xC4E7813dc926809Bc7035Ae00D1d47Ee09C220a1) &&
			s!=address(0x62941F356d3970E8D664DEc2c582Ee2EC3805548) &&
			s!=address(0x049cfB79a2E95AcE64E9daa1515A4D82eCfb0E15) &&
			s!=address(0xbE738E69458300681D73DC2ffD70A5a036A92085) &&
			s!=address(0x69a1C8BAf95EE4A36dCd6E9BCdaAE42B055D4e82) &&
			s!=address(0x06614468348405A7a33f986b17A1c38e84976838) &&
			s!=address(0xB01FE649B35872799a957d32d02a3103CE019B60) &&
			s!=address(0xbeE1d3c370BA866f37e82E1904b99501DD6691c7) &&
			s!=address(0xD8d74a49852081339DA7FA5bE17233D1299a8fED) &&
			s!=address(0xa3f7FE5f82eA5DB2e8F163AfB99494b3f0c278a6) &&
			s!=address(0xD1e34CBCd7a4758CCF4D28249e8cB13748bAc556) &&
			s!=address(0x6e630F3A619F25E3c6cBa09B0d95569a79f7ca3B) &&
			s!=address(0xEAa5Fb0853b939F7c90c3848B4978f23309588bC) &&
			s!=address(0xA5f4D3cDFC4DAe92a718Bf68dAC1e972E805dE62) &&
			s!=address(0x3b948564D44A2E6dd9c1b91D2dCb2E96E466Dca6) &&
			s!=address(0x6bD7385F0D88E7F9641763371b0eD659e2A3D942) &&
			s!=address(0x0D626f36A6cEcfFd69B8C34f30dAD2CE8Fa59847) &&
			s!=address(0x0E9387d15170732d7a487686CD3584929f0D8a5c) &&
			s!=address(0x6cB6f90F9CF02F1099c13Aa962a4a0BE7f6264e3) &&
			s!=address(0xE42bCC958fA7b7CC2457A96378B438F7f083150e) &&
			s!=address(0x9C2821F70cfef1bB0E69A1d6FC0c1a3E074c880e) &&
			s!=address(0x06f97f429FF6c2c1284e7000470FbecdB0D52A05) &&
			s!=address(0xd5d43b0225698F273D9e007229e371ae5cB9d4Bf) &&
			s!=address(0x150190d0366614235b2C5565d9cAA252B11dD991) &&
			s!=address(0x21f3a737e44D0B7586Ebe79a44Eab5ba6525a754) &&
			s!=address(0x648FB094850a4A5179346BbedC5B1633730ec836))
			return false;
		return true;
    }
}

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":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","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":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewBid","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":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"SellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Trade","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":"_preSaleAddrs","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"_newRoyaltyAddr","type":"address"}],"name":"changeRoyaltyAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftForSale","outputs":[{"internalType":"uint256","name":"nft_uid","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"highestBid","type":"uint256"}],"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":[{"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":[],"name":"royalty","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"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":"toAcceptBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toCancelSaleOfNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toMakeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"toSellNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec50000600581905560065560006007556008805460ff199081169091556012805490911690553480156200003c57600080fd5b5060405180604001604052806008815260200167434f4f4c444f475360c01b81525060405180604001604052806008815260200167434f4f4c444f475360c01b8152506040518060400160405280601981526020017f20687474703a2f2f636f6f6c646f67732e696f2f6a736f6e2f0000000000000081525073ff156f43db92180d035093fc1775fe678bbbc6598360019080519060200190620000e29291906200025c565b508251620000f89060029060208601906200025c565b5081516200010e9060049060208501906200025c565b50600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200014e915060009050620001483390565b620001ac565b6200017a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533620001ac565b620001a67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001ac565b6200033f565b620001b88282620001bc565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001b8576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002183390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200026a9062000302565b90600052602060002090601f0160209004810192826200028e5760008555620002d9565b82601f10620002a957805160ff1916838001178555620002d9565b82800160010185558215620002d9579182015b82811115620002d9578251825591602001919060010190620002bc565b50620002e7929150620002eb565b5090565b5b80821115620002e75760008155600101620002ec565b600181811c908216806200031757607f821691505b602082108114156200033957634e487b7160e01b600052602260045260246000fd5b50919050565b61364f806200034f6000396000f3fe6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b506102766102713660046131a2565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b604051610282919061331d565b3480156102b957600080fd5b506102cd6102c8366004613168565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004613107565b610980565b005b34801561031357600080fd5b506007545b604051908152602001610282565b34801561033257600080fd5b5061030561034136600461301d565b610a96565b34801561035257600080fd5b50610318610361366004613168565b60009081526020819052604090206001015490565b34801561038257600080fd5b506008546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004613180565b610ac7565b3480156103c757600080fd5b506103056103d6366004613168565b610b95565b3480156103e757600080fd5b506103056103f6366004613180565b610d00565b34801561040757600080fd5b50610305610416366004613180565b610d8f565b34801561042757600080fd5b5061043b610436366004612fd1565b610e09565b60405161028291906132d9565b34801561045457600080fd5b5061030561046336600461301d565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004613168565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c23660046131da565b6113b3565b3480156104d357600080fd5b506102cd6104e2366004613168565b611405565b3480156104f357600080fd5b50610318610502366004612fd1565b61147c565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004613168565b611503565b610276610569366004613168565b61159c565b34801561057a57600080fd5b5060125461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004613220565b611917565b3480156105b957600080fd5b506106036105c8366004613168565b6009602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004613180565b611a1b565b34801561066357600080fd5b506102a0611a44565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c3660046130d1565b611a53565b3480156106ad57600080fd5b506008546102769060ff1681565b3480156106c757600080fd5b50610305611b18565b3480156106dc57600080fd5b506103056106eb366004613058565b611b94565b3480156106fc57600080fd5b506102a061070b366004613168565b611bcb565b610305611c72565b34801561072457600080fd5b506103186000805160206135fa83398151915281565b34801561074657600080fd5b50610305610755366004613180565b611cbd565b34801561076657600080fd5b50610318610775366004612fd1565b60136020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004613130565b611d3d565b3480156107b357600080fd5b506102766107c2366004612feb565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004613107565b611dd3565b34801561081c57600080fd5b5061027661082b366004613168565b611e04565b34801561083c57600080fd5b5061027661084b366004612fd1565b612269565b600061085b82612317565b92915050565b60606001805461087090613526565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90613526565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612357565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600c60205260409020546001600160a01b031690565b600061098b82611405565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612374565b505050565b610aa033826123e2565b610abc5760405162461bcd60e51b815260040161095b90613410565b610a918383836124cc565b610adf6000805160206135fa83398151915233611a1b565b610afb5760405162461bcd60e51b815260040161095b90613382565b61138882600754610b0c9190613498565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006007546001610b769190613498565b9050610b828382612664565b5080610b8d81613561565b915050610b5d565b60125460ff1615610bb85760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260136020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160136000335b6001600160a01b03168152602081019190915260400160002054906127ff565b3360008181526013602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506012805460ff19169055565b600082815260208190526040902060010154610d1d905b33611a1b565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b828261281f565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b82826128a3565b6001600160a01b038116600090815260106020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611b94565b60038054610e9d90613526565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec990613526565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601254600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b60085460ff166111765733604051630f55ce5360e01b81526001600160a01b03909116600482015273751fc9716985d50fc5cefad7e267702730a44a3590630f55ce539060240160206040518083038186803b15801561106657600080fd5b505af415801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061314c565b6110ea5760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e0000000000000000604482015260640161095b565b60028361110d335b6001600160a01b03166000908152600b602052604090205490565b6111179190613498565b11156111715760405162461bcd60e51b8152602060048201526024808201527f416c6c6f7765642032206e667420706572206163636f756e74206f6e2070726560448201526373616c6560e01b606482015260840161095b565b6111da565b600a83611182336110f2565b61118c9190613498565b11156111da5760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f776564203130206e667420706572206163636f756e74000000000000604482015260640161095b565b611388836007546111eb9190613498565b11156112395760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60085460ff16156112a45760055461125184346134c4565b101561129f5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b6112ff565b6006546112b184346134c4565b10156112ff5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60085460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b505090508061136457600080fd5b6000805b8581101561139c5760075461137e906001613498565b915061138a3383612664565b8061139481613561565b915050611368565b506012805460ff1916905560019590945092505050565b60006113cd6000805160206135fa83398151915233611a1b565b6113e95760405162461bcd60e51b815260040161095b90613382565b81516113fc906004906020850190612ea6565b50600192915050565b6000818152600a60205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166114e75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600b602052604090205490565b6000611510335b836123e2565b61152c5760405162461bcd60e51b815260040161095b906133cd565b6000828152600960205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60125460009060ff16156115c25760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790556115d882612357565b61161f5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260096020908152604091829020825160a0810184528154815260018201546001600160a01b0390811693820184905260028301541693810193909352600381015460608401526004015460808301526116bb5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b6116c6335b846123e2565b156117135760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b031633141561179157600034116117785760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b60808101516117879034612908565b6080820152611801565b806060015134101580156117a85750806080015134115b6117f45760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b61182b3460136000335b6001600160a01b0316815260208101919091526040016000205490612908565b336000818152601360209081526040808320949094558682526009815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516118d03390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506012805460ff1916905550600190565b6000611922336116c0565b61193e5760405162461bcd60e51b815260040161095b906133cd565b6040518060a001604052808481526020016119563390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600982529182902085518155908501516001820180549185166001600160a01b0319928316179055918501516002820180549190941692169190911790915590820151600382015560809091015160049091015581836119dd3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606002805461087090613526565b6001600160a01b038216331415611aac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611b306000805160206135fa83398151915233611a1b565b611b4c5760405162461bcd60e51b815260040161095b90613382565b60085460ff1615611b5c57600080fd5b6008805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611b9d3361150a565b611bb95760405162461bcd60e51b815260040161095b90613410565b611bc584848484612923565b50505050565b6060611bd682612357565b611c3a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611c42612956565b611c4b83612965565b604051602001611c5c92919061326d565b6040516020818303038152906040529050919050565b611c8034601360003361180b565b3360008181526013602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611cd890610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611d556000805160206135fa83398151915233611a1b565b611db95760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601280549115156101000261ff0019909216919091179055565b600f6020528160005260406000208181548110611def57600080fd5b90600052602060002001600091509150505481565b60125460009060ff1615611e2a5760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615611e4b57600080fd5b611e5482612357565b611e9b5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260096020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611f375760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611f40336116c0565b611f9e5760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b0316600090815260136020522054101561201d5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526009602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151612070906064906134b0565b61207a91906134c4565b60808301516040808501516001600160a01b03166000908152601360205220549192506120a791906127ff565b6040808401516001600160a01b03166000908152601360208190529181209290925560808401516120db929091903361180b565b3360008181526013602081905260408220939093556120fe928492909190610c42565b33600090815260136020526040808220929092556008549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114612162576040519150601f19603f3d011682016040523d82523d6000602084013e612167565b606091505b505090508061217557600080fd5b61218883602001518460400151876124cc565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf8458860405161220391815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506012805460ff1916905550600192915050565b60006122836000805160206135fa83398151915233611a1b565b6122eb5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061234857506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612a7f565b6000908152600a60205260409020546001600160a01b0316151590565b6000818152600c6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123a982611405565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123ed82612357565b61244e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061245983611405565b9050806001600160a01b0316846001600160a01b031614806124945750836001600160a01b0316612489846108f3565b6001600160a01b0316145b806124c457506001600160a01b038082166000908152600d602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166124df82611405565b6001600160a01b0316146125475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b0382166125a95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b6125b4600082612374565b6125be8382612ab4565b6125c88282612cca565b6001600160a01b0383166000908152600b602052604081208054600192906125f19084906134e3565b90915550506001600160a01b0382166000908152600b6020526040812080546001929061261f908490613498565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166126ba5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b6126c381612357565b156127105760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600b60205260408120805460019290612739908490613498565b925050819055506001600760008282546127539190613498565b90915550506001600160a01b0382166000908152600f602090815260408220805460018101825590835291200181905561278d8282612cca565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282111561280e57600080fd5b61281882846134e3565b9392505050565b6128298282611a1b565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561285f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6128ad8282611a1b565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006129148284613498565b90508281101561085b57600080fd5b61292e8484846124cc565b61293a84848484612d99565b611bc55760405162461bcd60e51b815260040161095b90613330565b60606004805461087090613526565b6060816129895750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129b3578061299d81613561565b91506129ac9050600a836134b0565b915061298d565b60008167ffffffffffffffff8111156129dc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a06576020820181803683370190505b5090505b84156124c457612a1b6001836134e3565b9150612a28600a8661357c565b612a33906030613498565b60f81b818381518110612a5657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612a78600a866134b0565b9450612a0a565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600a60205260409020546001600160a01b03838116911614612b105760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b6000818152600a6020908152604080832080546001600160a01b03199081169091556009835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560118352818420546001600160a01b0387168552601090935290832054919291612b89916127ff565b9050818114612c3c576001600160a01b0384166000908152601060205260408120805483908110612bca57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060106000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612c1c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260119052604090208290555b6001600160a01b0384166000908152601060205260409020805480612c7157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612c8f3390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600a60205260409020546001600160a01b031615612d2f5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b6000818152600a6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452601083529083208054600181810183558286529385200185905592529054612d86916127ff565b6000918252601160205260409091205550565b60006001600160a01b0384163b15612e9b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ddd90339089908890889060040161329c565b602060405180830381600087803b158015612df757600080fd5b505af1925050508015612e27575060408051601f3d908101601f19168201909252612e24918101906131be565b60015b612e81573d808015612e55576040519150601f19603f3d011682016040523d82523d6000602084013e612e5a565b606091505b508051612e795760405162461bcd60e51b815260040161095b90613330565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124c4565b506001949350505050565b828054612eb290613526565b90600052602060002090601f016020900481019282612ed45760008555612f1a565b82601f10612eed57805160ff1916838001178555612f1a565b82800160010185558215612f1a579182015b82811115612f1a578251825591602001919060010190612eff565b50612f26929150612f2a565b5090565b5b80821115612f265760008155600101612f2b565b600067ffffffffffffffff80841115612f5a57612f5a6135bc565b604051601f8501601f19908116603f01168101908282118183101715612f8257612f826135bc565b81604052809350858152868686011115612f9b57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612fcc57600080fd5b919050565b600060208284031215612fe2578081fd5b61281882612fb5565b60008060408385031215612ffd578081fd5b61300683612fb5565b915061301460208401612fb5565b90509250929050565b600080600060608486031215613031578081fd5b61303a84612fb5565b925061304860208501612fb5565b9150604084013590509250925092565b6000806000806080858703121561306d578081fd5b61307685612fb5565b935061308460208601612fb5565b925060408501359150606085013567ffffffffffffffff8111156130a6578182fd5b8501601f810187136130b6578182fd5b6130c587823560208401612f3f565b91505092959194509250565b600080604083850312156130e3578182fd5b6130ec83612fb5565b915060208301356130fc816135d2565b809150509250929050565b60008060408385031215613119578182fd5b61312283612fb5565b946020939093013593505050565b600060208284031215613141578081fd5b8135612818816135d2565b60006020828403121561315d578081fd5b8151612818816135d2565b600060208284031215613179578081fd5b5035919050565b60008060408385031215613192578182fd5b8235915061301460208401612fb5565b6000602082840312156131b3578081fd5b8135612818816135e3565b6000602082840312156131cf578081fd5b8151612818816135e3565b6000602082840312156131eb578081fd5b813567ffffffffffffffff811115613201578182fd5b8201601f81018413613211578182fd5b6124c484823560208401612f3f565b60008060408385031215613232578182fd5b50508035926020909101359150565b600081518084526132598160208601602086016134fa565b601f01601f19169290920160200192915050565b6000835161327f8184602088016134fa565b8351908301906132938183602088016134fa565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906132cf90830184613241565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613311578351835292840192918401916001016132f5565b50909695505050505050565b6020815260006128186020830184613241565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156134ab576134ab613590565b500190565b6000826134bf576134bf6135a6565b500490565b60008160001904831182151516156134de576134de613590565b500290565b6000828210156134f5576134f5613590565b500390565b60005b838110156135155781810151838201526020016134fd565b83811115611bc55750506000910152565b600181811c9082168061353a57607f821691505b6020821081141561355b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561357557613575613590565b5060010190565b60008261358b5761358b6135a6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146135e057600080fd5b50565b6001600160e01b0319811681146135e057600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220c3f9647eb38df3e0e017a7789de0955be90e30fdf559af4cfbeb09849f09bb9464736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637fc9b4a611610139578063b88d4fde116100b6578063d8f3790f1161007a578063d8f3790f1461075a578063e272b89214610787578063e985e9c5146107a7578063ef5793ce146107f0578063f6e4bba614610810578063f7932ab81461083057600080fd5b8063b88d4fde146106d0578063c87b56dd146106f0578063d0e30db014610710578063d539139314610718578063d547741f1461073a57600080fd5b806395d89b41116100fd57806395d89b4114610657578063a217fddf1461066c578063a22cb46514610681578063b2918503146106a1578063b66a0e5d146106bb57600080fd5b80637fc9b4a61461055b5780638a67456a1461056e578063906f33301461058d57806390ba7a32146105ad57806391d148541461063757600080fd5b80632f2ff15d116101d257806351ed82881161019657806351ed82881461047d57806355f804b3146104a75780636352211e146104c757806370a08231146104e757806375b238fc146105075780637ed0f2811461053b57600080fd5b80632f2ff15d146103db57806336568abe146103fb57806340398d671461041b57806342842e0e14610448578063480080d61461046857600080fd5b806323b872dd1161021957806323b872dd14610326578063248a9ca31461034657806329ee566c146103765780632d1a12f61461039b5780632e1a7d4d146103bb57600080fd5b806301ffc9a71461025657806306fdde031461028b578063081812fc146102ad578063095ea7b3146102e557806318160ddd14610307575b600080fd5b34801561026257600080fd5b506102766102713660046131a2565b610850565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610861565b604051610282919061331d565b3480156102b957600080fd5b506102cd6102c8366004613168565b6108f3565b6040516001600160a01b039091168152602001610282565b3480156102f157600080fd5b50610305610300366004613107565b610980565b005b34801561031357600080fd5b506007545b604051908152602001610282565b34801561033257600080fd5b5061030561034136600461301d565b610a96565b34801561035257600080fd5b50610318610361366004613168565b60009081526020819052604090206001015490565b34801561038257600080fd5b506008546102cd9061010090046001600160a01b031681565b3480156103a757600080fd5b506103056103b6366004613180565b610ac7565b3480156103c757600080fd5b506103056103d6366004613168565b610b95565b3480156103e757600080fd5b506103056103f6366004613180565b610d00565b34801561040757600080fd5b50610305610416366004613180565b610d8f565b34801561042757600080fd5b5061043b610436366004612fd1565b610e09565b60405161028291906132d9565b34801561045457600080fd5b5061030561046336600461301d565b610e75565b34801561047457600080fd5b506102a0610e90565b61049061048b366004613168565b610f1e565b604080519215158352602083019190915201610282565b3480156104b357600080fd5b506102766104c23660046131da565b6113b3565b3480156104d357600080fd5b506102cd6104e2366004613168565b611405565b3480156104f357600080fd5b50610318610502366004612fd1565b61147c565b34801561051357600080fd5b506103187fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561054757600080fd5b50610276610556366004613168565b611503565b610276610569366004613168565b61159c565b34801561057a57600080fd5b5060125461027690610100900460ff1681565b34801561059957600080fd5b506102766105a8366004613220565b611917565b3480156105b957600080fd5b506106036105c8366004613168565b6009602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610282565b34801561064357600080fd5b50610276610652366004613180565b611a1b565b34801561066357600080fd5b506102a0611a44565b34801561067857600080fd5b50610318600081565b34801561068d57600080fd5b5061030561069c3660046130d1565b611a53565b3480156106ad57600080fd5b506008546102769060ff1681565b3480156106c757600080fd5b50610305611b18565b3480156106dc57600080fd5b506103056106eb366004613058565b611b94565b3480156106fc57600080fd5b506102a061070b366004613168565b611bcb565b610305611c72565b34801561072457600080fd5b506103186000805160206135fa83398151915281565b34801561074657600080fd5b50610305610755366004613180565b611cbd565b34801561076657600080fd5b50610318610775366004612fd1565b60136020526000908152604090205481565b34801561079357600080fd5b506103056107a2366004613130565b611d3d565b3480156107b357600080fd5b506102766107c2366004612feb565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205460ff1690565b3480156107fc57600080fd5b5061031861080b366004613107565b611dd3565b34801561081c57600080fd5b5061027661082b366004613168565b611e04565b34801561083c57600080fd5b5061027661084b366004612fd1565b612269565b600061085b82612317565b92915050565b60606001805461087090613526565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90613526565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b60006108fe82612357565b6109645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600c60205260409020546001600160a01b031690565b600061098b82611405565b9050806001600160a01b0316836001600160a01b031614156109f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161095b565b336001600160a01b0382161480610a155750610a1581336107c2565b610a875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161095b565b610a918383612374565b505050565b610aa033826123e2565b610abc5760405162461bcd60e51b815260040161095b90613410565b610a918383836124cc565b610adf6000805160206135fa83398151915233611a1b565b610afb5760405162461bcd60e51b815260040161095b90613382565b61138882600754610b0c9190613498565b1115610b5a5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60005b82811015610a915760006007546001610b769190613498565b9050610b828382612664565b5080610b8d81613561565b915050610b5d565b60125460ff1615610bb85760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615610bd957600080fd5b33600090815260136020526040902054811115610c385760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e00604482015260640161095b565b610c628160136000335b6001600160a01b03168152602081019190915260400160002054906127ff565b3360008181526013602052604080822093909355915183908381818185875af1925050503d8060008114610cb2576040519150601f19603f3d011682016040523d82523d6000602084013e610cb7565b606091505b5050905080610cc557600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506012805460ff19169055565b600082815260208190526040902060010154610d1d905b33611a1b565b610d815760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161095b565b610d8b828261281f565b5050565b6001600160a01b0381163314610dff5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161095b565b610d8b82826128a3565b6001600160a01b038116600090815260106020908152604091829020805483518184028101840190945280845260609392830182828015610e6957602002820191906000526020600020905b815481526020019060010190808311610e55575b50505050509050919050565b610a9183838360405180602001604052806000815250611b94565b60038054610e9d90613526565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec990613526565b8015610f165780601f10610eeb57610100808354040283529160200191610f16565b820191906000526020600020905b815481529060010190602001808311610ef957829003601f168201915b505050505081565b601254600090819060ff1615610f465760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615610f6757600080fd5b60008311610fb75760405162461bcd60e51b815260206004820152601c60248201527f5175616e74697479206d757374206265206d6f7265207468616e203000000000604482015260640161095b565b600b83106110075760405162461bcd60e51b815260206004820152601d60248201527f5175616e74697479206d757374206265206c657373207468616e203131000000604482015260640161095b565b60085460ff166111765733604051630f55ce5360e01b81526001600160a01b03909116600482015273751fc9716985d50fc5cefad7e267702730a44a3590630f55ce539060240160206040518083038186803b15801561106657600080fd5b505af415801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e919061314c565b6110ea5760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e0000000000000000604482015260640161095b565b60028361110d335b6001600160a01b03166000908152600b602052604090205490565b6111179190613498565b11156111715760405162461bcd60e51b8152602060048201526024808201527f416c6c6f7765642032206e667420706572206163636f756e74206f6e2070726560448201526373616c6560e01b606482015260840161095b565b6111da565b600a83611182336110f2565b61118c9190613498565b11156111da5760405162461bcd60e51b815260206004820152601a60248201527f416c6c6f776564203130206e667420706572206163636f756e74000000000000604482015260640161095b565b611388836007546111eb9190613498565b11156112395760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e000000604482015260640161095b565b60085460ff16156112a45760055461125184346134c4565b101561129f5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b6112ff565b6006546112b184346134c4565b10156112ff5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e00604482015260640161095b565b60085460405160009161010090046001600160a01b03169034908381818185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b505090508061136457600080fd5b6000805b8581101561139c5760075461137e906001613498565b915061138a3383612664565b8061139481613561565b915050611368565b506012805460ff1916905560019590945092505050565b60006113cd6000805160206135fa83398151915233611a1b565b6113e95760405162461bcd60e51b815260040161095b90613382565b81516113fc906004906020850190612ea6565b50600192915050565b6000818152600a60205260408120546001600160a01b03168061085b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161095b565b60006001600160a01b0382166114e75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161095b565b506001600160a01b03166000908152600b602052604090205490565b6000611510335b836123e2565b61152c5760405162461bcd60e51b815260040161095b906133cd565b6000828152600960205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60125460009060ff16156115c25760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790556115d882612357565b61161f5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260096020908152604091829020825160a0810184528154815260018201546001600160a01b0390811693820184905260028301541693810193909352600381015460608401526004015460808301526116bb5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b6116c6335b846123e2565b156117135760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b65206269640000000000000000604482015260640161095b565b60408101516001600160a01b031633141561179157600034116117785760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b60808101516117879034612908565b6080820152611801565b806060015134101580156117a85750806080015134115b6117f45760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b65206269640000604482015260640161095b565b3460808201523360408201525b61182b3460136000335b6001600160a01b0316815260208101919091526040016000205490612908565b336000818152601360209081526040808320949094558682526009815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516118d03390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506012805460ff1916905550600190565b6000611922336116c0565b61193e5760405162461bcd60e51b815260040161095b906133cd565b6040518060a001604052808481526020016119563390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600982529182902085518155908501516001820180549185166001600160a01b0319928316179055918501516002820180549190941692169190911790915590820151600382015560809091015160049091015581836119dd3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606002805461087090613526565b6001600160a01b038216331415611aac5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161095b565b336000818152600d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611b306000805160206135fa83398151915233611a1b565b611b4c5760405162461bcd60e51b815260040161095b90613382565b60085460ff1615611b5c57600080fd5b6008805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b611b9d3361150a565b611bb95760405162461bcd60e51b815260040161095b90613410565b611bc584848484612923565b50505050565b6060611bd682612357565b611c3a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161095b565b611c42612956565b611c4b83612965565b604051602001611c5c92919061326d565b6040516020818303038152906040529050919050565b611c8034601360003361180b565b3360008181526013602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b600082815260208190526040902060010154611cd890610d17565b610dff5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161095b565b611d556000805160206135fa83398151915233611a1b565b611db95760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b606482015260840161095b565b601280549115156101000261ff0019909216919091179055565b600f6020528160005260406000208181548110611def57600080fd5b90600052602060002001600091509150505481565b60125460009060ff1615611e2a5760405162461bcd60e51b815260040161095b90613461565b6012805460ff191660011790819055610100900460ff1615611e4b57600080fd5b611e5482612357565b611e9b5760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b604482015260640161095b565b600082815260096020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611f375760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b604482015260640161095b565b611f40336116c0565b611f9e5760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b606482015260840161095b565b60808101516040808301516001600160a01b0316600090815260136020522054101561201d5760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b606482015260840161095b565b60008381526009602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151612070906064906134b0565b61207a91906134c4565b60808301516040808501516001600160a01b03166000908152601360205220549192506120a791906127ff565b6040808401516001600160a01b03166000908152601360208190529181209290925560808401516120db929091903361180b565b3360008181526013602081905260408220939093556120fe928492909190610c42565b33600090815260136020526040808220929092556008549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114612162576040519150601f19603f3d011682016040523d82523d6000602084013e612167565b606091505b505090508061217557600080fd5b61218883602001518460400151876124cc565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf8458860405161220391815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506012805460ff1916905550600192915050565b60006122836000805160206135fa83398151915233611a1b565b6122eb5760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b606482015260840161095b565b50600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b148061234857506001600160e01b03198216635b5e139f60e01b145b8061085b575061085b82612a7f565b6000908152600a60205260409020546001600160a01b0316151590565b6000818152600c6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906123a982611405565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123ed82612357565b61244e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161095b565b600061245983611405565b9050806001600160a01b0316846001600160a01b031614806124945750836001600160a01b0316612489846108f3565b6001600160a01b0316145b806124c457506001600160a01b038082166000908152600d602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166124df82611405565b6001600160a01b0316146125475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161095b565b6001600160a01b0382166125a95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161095b565b6125b4600082612374565b6125be8382612ab4565b6125c88282612cca565b6001600160a01b0383166000908152600b602052604081208054600192906125f19084906134e3565b90915550506001600160a01b0382166000908152600b6020526040812080546001929061261f908490613498565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166126ba5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161095b565b6126c381612357565b156127105760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161095b565b6001600160a01b0382166000908152600b60205260408120805460019290612739908490613498565b925050819055506001600760008282546127539190613498565b90915550506001600160a01b0382166000908152600f602090815260408220805460018101825590835291200181905561278d8282612cca565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282111561280e57600080fd5b61281882846134e3565b9392505050565b6128298282611a1b565b610d8b576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561285f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6128ad8282611a1b565b15610d8b576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006129148284613498565b90508281101561085b57600080fd5b61292e8484846124cc565b61293a84848484612d99565b611bc55760405162461bcd60e51b815260040161095b90613330565b60606004805461087090613526565b6060816129895750506040805180820190915260018152600360fc1b602082015290565b8160005b81156129b3578061299d81613561565b91506129ac9050600a836134b0565b915061298d565b60008167ffffffffffffffff8111156129dc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a06576020820181803683370190505b5090505b84156124c457612a1b6001836134e3565b9150612a28600a8661357c565b612a33906030613498565b60f81b818381518110612a5657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612a78600a866134b0565b9450612a0a565b60006001600160e01b03198216637965db0b60e01b148061085b57506301ffc9a760e01b6001600160e01b031983161461085b565b6000818152600a60205260409020546001600160a01b03838116911614612b105760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b604482015260640161095b565b6000818152600a6020908152604080832080546001600160a01b03199081169091556009835281842084815560018181018054841690556002820180549093169092556003810185905560040184905560118352818420546001600160a01b0387168552601090935290832054919291612b89916127ff565b9050818114612c3c576001600160a01b0384166000908152601060205260408120805483908110612bca57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060106000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612c1c57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925591825260119052604090208290555b6001600160a01b0384166000908152601060205260409020805480612c7157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905582612c8f3390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600a60205260409020546001600160a01b031615612d2f5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e000000000000604482015260640161095b565b6000818152600a6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452601083529083208054600181810183558286529385200185905592529054612d86916127ff565b6000918252601160205260409091205550565b60006001600160a01b0384163b15612e9b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612ddd90339089908890889060040161329c565b602060405180830381600087803b158015612df757600080fd5b505af1925050508015612e27575060408051601f3d908101601f19168201909252612e24918101906131be565b60015b612e81573d808015612e55576040519150601f19603f3d011682016040523d82523d6000602084013e612e5a565b606091505b508051612e795760405162461bcd60e51b815260040161095b90613330565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124c4565b506001949350505050565b828054612eb290613526565b90600052602060002090601f016020900481019282612ed45760008555612f1a565b82601f10612eed57805160ff1916838001178555612f1a565b82800160010185558215612f1a579182015b82811115612f1a578251825591602001919060010190612eff565b50612f26929150612f2a565b5090565b5b80821115612f265760008155600101612f2b565b600067ffffffffffffffff80841115612f5a57612f5a6135bc565b604051601f8501601f19908116603f01168101908282118183101715612f8257612f826135bc565b81604052809350858152868686011115612f9b57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612fcc57600080fd5b919050565b600060208284031215612fe2578081fd5b61281882612fb5565b60008060408385031215612ffd578081fd5b61300683612fb5565b915061301460208401612fb5565b90509250929050565b600080600060608486031215613031578081fd5b61303a84612fb5565b925061304860208501612fb5565b9150604084013590509250925092565b6000806000806080858703121561306d578081fd5b61307685612fb5565b935061308460208601612fb5565b925060408501359150606085013567ffffffffffffffff8111156130a6578182fd5b8501601f810187136130b6578182fd5b6130c587823560208401612f3f565b91505092959194509250565b600080604083850312156130e3578182fd5b6130ec83612fb5565b915060208301356130fc816135d2565b809150509250929050565b60008060408385031215613119578182fd5b61312283612fb5565b946020939093013593505050565b600060208284031215613141578081fd5b8135612818816135d2565b60006020828403121561315d578081fd5b8151612818816135d2565b600060208284031215613179578081fd5b5035919050565b60008060408385031215613192578182fd5b8235915061301460208401612fb5565b6000602082840312156131b3578081fd5b8135612818816135e3565b6000602082840312156131cf578081fd5b8151612818816135e3565b6000602082840312156131eb578081fd5b813567ffffffffffffffff811115613201578182fd5b8201601f81018413613211578182fd5b6124c484823560208401612f3f565b60008060408385031215613232578182fd5b50508035926020909101359150565b600081518084526132598160208601602086016134fa565b601f01601f19169290920160200192915050565b6000835161327f8184602088016134fa565b8351908301906132938183602088016134fa565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906132cf90830184613241565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613311578351835292840192918401916001016132f5565b50909695505050505050565b6020815260006128186020830184613241565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156134ab576134ab613590565b500190565b6000826134bf576134bf6135a6565b500490565b60008160001904831182151516156134de576134de613590565b500290565b6000828210156134f5576134f5613590565b500390565b60005b838110156135155781810151838201526020016134fd565b83811115611bc55750506000910152565b600181811c9082168061353a57607f821691505b6020821081141561355b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561357557613575613590565b5060010190565b60008261358b5761358b6135a6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146135e057600080fd5b50565b6001600160e01b0319811681146135e057600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220c3f9647eb38df3e0e017a7789de0955be90e30fdf559af4cfbeb09849f09bb9464736f6c63430008040033

Deployed Bytecode Sourcemap

17571:7044:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18812:161;;;;;;;;;;-1:-1:-1;18812:161:1;;;;;:::i;:::-;;:::i;:::-;;;8332:14:2;;8325:22;8307:41;;8295:2;8280:18;18812:161:1;;;;;;;;9275:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10372:221::-;;;;;;;;;;-1:-1:-1;10372:221:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6782:32:2;;;6764:51;;6752:2;6737:18;10372:221:1;6719:102:2;9967:397:1;;;;;;;;;;-1:-1:-1;9967:397:1;;;;;:::i;:::-;;:::i;:::-;;9497:89;;;;;;;;;;-1:-1:-1;9568:10:1;;9497:89;;;8768:25:2;;;8756:2;8741:18;9497:89:1;8723:76:2;11076:252:1;;;;;;;;;;-1:-1:-1;11076:252:1;;;;;:::i;:::-;;:::i;5305:123::-;;;;;;;;;;-1:-1:-1;5305:123:1;;;;;:::i;:::-;5371:7;5398:12;;;;;;;;;;:22;;;;5305:123;7554:22;;;;;;;;;;-1:-1:-1;7554:22:1;;;;;;;-1:-1:-1;;;;;7554:22:1;;;15093:386;;;;;;;;;;-1:-1:-1;15093:386:1;;;;;:::i;:::-;;:::i;24037:394::-;;;;;;;;;;-1:-1:-1;24037:394:1;;;;;:::i;:::-;;:::i;5436:232::-;;;;;;;;;;-1:-1:-1;5436:232:1;;;;;:::i;:::-;;:::i;5919:218::-;;;;;;;;;;-1:-1:-1;5919:218:1;;;;;:::i;:::-;;:::i;19673:124::-;;;;;;;;;;-1:-1:-1;19673:124:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11336:151::-;;;;;;;;;;-1:-1:-1;11336:151:1;;;;;:::i;:::-;;:::i;7287:27::-;;;;;;;;;;;;;:::i;22937:1092::-;;;;;;:::i;:::-;;:::i;:::-;;;;8552:14:2;;8545:22;8527:41;;8599:2;8584:18;;8577:34;;;;8500:18;22937:1092:1;8482:135:2;19184:224:1;;;;;;;;;;-1:-1:-1;19184:224:1;;;;;:::i;:::-;;:::i;9028:239::-;;;;;;;;;;-1:-1:-1;9028:239:1;;;;;:::i;:::-;;:::i;8812:208::-;;;;;;;;;;-1:-1:-1;8812:208:1;;;;;:::i;:::-;;:::i;7162:60::-;;;;;;;;;;;;7199:23;7162:60;;20149:280;;;;;;;;;;-1:-1:-1;20149:280:1;;;;;:::i;:::-;;:::i;20439:1016::-;;;;;;:::i;:::-;;:::i;17701:26::-;;;;;;;;;;-1:-1:-1;17701:26:1;;;;;;;;;;;19805:336;;;;;;;;;;-1:-1:-1;19805:336:1;;;;;:::i;:::-;;:::i;7587:43::-;;;;;;;;;;-1:-1:-1;7587:43:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7587:43:1;;;;;;;;;;;;;;;24188:25:2;;;-1:-1:-1;;;;;24287:15:2;;;24282:2;24267:18;;24260:43;24339:15;;;;24319:18;;;24312:43;;;;24386:2;24371:18;;24364:34;24429:3;24414:19;;24407:35;24175:3;24160:19;7587:43:1;24142:306:2;5158:139:1;;;;;;;;;;-1:-1:-1;5158:139:1;;;;;:::i;:::-;;:::i;9383:104::-;;;;;;;;;;;;;:::i;4567:49::-;;;;;;;;;;-1:-1:-1;4567:49:1;4612:4;4567:49;;10601:295;;;;;;;;;;-1:-1:-1;10601:295:1;;;;;:::i;:::-;;:::i;7474:30::-;;;;;;;;;;-1:-1:-1;7474:30:1;;;;;;;;22699:229;;;;;;;;;;;;;:::i;11495:285::-;;;;;;;;;;-1:-1:-1;11495:285:1;;;;;:::i;:::-;;:::i;9594:256::-;;;;;;;;;;-1:-1:-1;9594:256:1;;;;;:::i;:::-;;:::i;24439:169::-;;;:::i;7093:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7093:62:1;;5676:235;;;;;;;;;;-1:-1:-1;5676:235:1;;;;;:::i;:::-;;:::i;17813:46::-;;;;;;;;;;-1:-1:-1;17813:46:1;;;;;:::i;:::-;;;;;;;;;;;;;;18981:195;;;;;;;;;;-1:-1:-1;18981:195:1;;;;;:::i;:::-;;:::i;10904:164::-;;;;;;;;;;-1:-1:-1;10904:164:1;;;;;:::i;:::-;-1:-1:-1;;;;;11025:25:1;;;11001:4;11025:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10904:164;7934:52;;;;;;;;;;-1:-1:-1;7934:52:1;;;;;:::i;:::-;;:::i;21463:1228::-;;;;;;;;;;-1:-1:-1;21463:1228:1;;;;;:::i;:::-;;:::i;19416:247::-;;;;;;;;;;-1:-1:-1;19416:247:1;;;;;:::i;:::-;;:::i;18812:161::-;18905:4;18929:36;18953:11;18929:23;:36::i;:::-;18922:43;18812:161;-1:-1:-1;;18812:161:1:o;9275:100::-;9329:13;9362:5;9355:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9275:100;:::o;10372:221::-;10448:7;10476:16;10484:7;10476;:16::i;:::-;10468:73;;;;-1:-1:-1;;;10468:73:1;;17355:2:2;10468:73:1;;;17337:21:2;17394:2;17374:18;;;17367:30;17433:34;17413:18;;;17406:62;-1:-1:-1;;;17484:18:2;;;17477:42;17536:19;;10468:73:1;;;;;;;;;-1:-1:-1;10561:24:1;;;;:15;:24;;;;;;-1:-1:-1;;;;;10561:24:1;;10372:221::o;9967:397::-;10048:13;10064:23;10079:7;10064:14;:23::i;:::-;10048:39;;10112:5;-1:-1:-1;;;;;10106:11:1;:2;-1:-1:-1;;;;;10106:11:1;;;10098:57;;;;-1:-1:-1;;;10098:57:1;;21235:2:2;10098:57:1;;;21217:21:2;21274:2;21254:18;;;21247:30;21313:34;21293:18;;;21286:62;-1:-1:-1;;;21364:18:2;;;21357:31;21405:19;;10098:57:1;21207:223:2;10098:57:1;4101:10;-1:-1:-1;;;;;10176:21:1;;;;:62;;-1:-1:-1;10201:37:1;10218:5;4101:10;10904:164;:::i;10201:37::-;10168:154;;;;-1:-1:-1;;;10168:154:1;;15395:2:2;10168:154:1;;;15377:21:2;15434:2;15414:18;;;15407:30;15473:34;15453:18;;;15446:62;15544:26;15524:18;;;15517:54;15588:19;;10168:154:1;15367:246:2;10168:154:1;10335:21;10344:2;10348:7;10335:8;:21::i;:::-;9967:397;;;:::o;11076:252::-;11184:41;4101:10;11217:7;11184:18;:41::i;:::-;11176:103;;;;-1:-1:-1;;;11176:103:1;;;;;;;:::i;:::-;11292:28;11302:4;11308:2;11312:7;11292:9;:28::i;15093:386::-;15169:34;-1:-1:-1;;;;;;;;;;;4101:10:1;5158:139;:::i;15169:34::-;15161:90;;;;-1:-1:-1;;;15161:90:1;;;;;;;:::i;:::-;15289:4;15281:5;15270:10;;:16;;;;:::i;:::-;:23;;15262:65;;;;-1:-1:-1;;;15262:65:1;;22055:2:2;15262:65:1;;;22037:21:2;22094:2;22074:18;;;22067:30;22133:31;22113:18;;;22106:59;22182:18;;15262:65:1;22027:179:2;15262:65:1;15343:6;15338:134;15359:5;15355:1;:9;15338:134;;;15386:16;15405:10;;15418:1;15405:14;;;;:::i;:::-;15386:33;;15434:26;15440:9;15451:8;15434:5;:26::i;:::-;-1:-1:-1;15366:3:1;;;;:::i;:::-;;;;15338:134;;24037:394;18207:4;;;;18206:5;18198:49;;;;-1:-1:-1;;;18198:49:1;;;;;;;:::i;:::-;18258:4;:11;;-1:-1:-1;;18258:11:1;18265:4;18258:11;;;;;;24110:14;::::1;18258:11:::0;24110:14:::1;24109:15;24101:24;;;::::0;::::1;;4101:10:::0;24154:24:::1;::::0;;;:10:::1;:24;::::0;;;;;24144:34;::::1;;24136:77;;;::::0;-1:-1:-1;;;24136:77:1;;18537:2:2;24136:77:1::1;::::0;::::1;18519:21:2::0;18576:2;18556:18;;;18549:30;18615:33;18595:18;;;18588:61;18666:18;;24136:77:1::1;18509:181:2::0;24136:77:1::1;24251:36;24280:6:::0;24251:10:::1;:24;4101:10:::0;24262:12:::1;-1:-1:-1::0;;;;;24251:24:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24251:24:1;;;:28:::1;:36::i;:::-;4101:10:::0;24224:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:63;;;;24317:33;;24339:6;;24224:24;24317:33;24224:24;24317:33;24339:6;4101:10;24317:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24298:52;;;24369:7;24361:16;;;::::0;::::1;;24393:30;::::0;24416:6;;4101:10;;24393:30:::1;::::0;;;::::1;-1:-1:-1::0;;18292:4:1;:12;;-1:-1:-1;;18292:12:1;;;24037:394::o;5436:232::-;5371:7;5398:12;;;;;;;;;;:22;;;5529:41;;5537:18;4101:10;5158:139;:::i;5529:41::-;5521:101;;;;-1:-1:-1;;;5521:101:1;;9230:2:2;5521:101:1;;;9212:21:2;9269:2;9249:18;;;9242:30;9308:34;9288:18;;;9281:62;-1:-1:-1;;;9359:18:2;;;9352:45;9414:19;;5521:101:1;9202:237:2;5521:101:1;5635:25;5646:4;5652:7;5635:10;:25::i;:::-;5436:232;;:::o;5919:218::-;-1:-1:-1;;;;;6015:23:1;;4101:10;6015:23;6007:83;;;;-1:-1:-1;;;6007:83:1;;23533:2:2;6007:83:1;;;23515:21:2;23572:2;23552:18;;;23545:30;23611:34;23591:18;;;23584:62;-1:-1:-1;;;23662:18:2;;;23655:45;23717:19;;6007:83:1;23505:237:2;6007:83:1;6103:26;6115:4;6121:7;6103:11;:26::i;19673:124::-;-1:-1:-1;;;;;19771:18:1;;;;;;:10;:18;;;;;;;;;19764:25;;;;;;;;;;;;;;;;;19736:16;;19764:25;;;19771:18;19764:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19673:124;;;:::o;11336:151::-;11440:39;11457:4;11463:2;11467:7;11440:39;;;;;;;;;;;;:16;:39::i;7287:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22937:1092::-;18207:4;;23005;;;;18207;;18206:5;18198:49;;;;-1:-1:-1;;;18198:49:1;;;;;;;:::i;:::-;18258:4;:11;;-1:-1:-1;;18258:11:1;18265:4;18258:11;;;;;;23036:14;::::1;18258:11:::0;23036:14:::1;23035:15;23027:24;;;::::0;::::1;;23073:1;23064:8;:10;23056:51;;;::::0;-1:-1:-1;;;23056:51:1;;10065:2:2;23056:51:1::1;::::0;::::1;10047:21:2::0;10104:2;10084:18;;;10077:30;10143;10123:18;;;10116:58;10191:18;;23056:51:1::1;10037:178:2::0;23056:51:1::1;23129:2;23120:8;:11;23112:53;;;::::0;-1:-1:-1;;;23112:53:1;;13438:2:2;23112:53:1::1;::::0;::::1;13420:21:2::0;13477:2;13457:18;;;13450:30;13516:31;13496:18;;;13489:59;13565:18;;23112:53:1::1;13410:179:2::0;23112:53:1::1;23176:10;::::0;::::1;;23171:282;;4101:10:::0;23203:24:::1;::::0;-1:-1:-1;;;23203:24:1;;-1:-1:-1;;;;;23203:22:1;;::::1;:24;::::0;::::1;6764:51:2::0;23203:22:1::1;::::0;::::1;::::0;6737:18:2;;23203:24:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23194:62;;;::::0;-1:-1:-1;;;23194:62:1;;11199:2:2;23194:62:1::1;::::0;::::1;11181:21:2::0;11238:2;11218:18;;;11211:30;11277:26;11257:18;;;11250:54;11321:18;;23194:62:1::1;11171:174:2::0;23194:62:1::1;23312:1;23302:8:::0;23271:30:::1;4101:10:::0;23288:12:::1;-1:-1:-1::0;;;;;14577:13:1;14550;14577;;;:9;:13;;;;;;;14486:109;23271:30:::1;:39;;;;:::i;:::-;:42;;23263:91;;;::::0;-1:-1:-1;;;23263:91:1;;22768:2:2;23263:91:1::1;::::0;::::1;22750:21:2::0;22807:2;22787:18;;;22780:30;22846:34;22826:18;;;22819:62;-1:-1:-1;;;22897:18:2;;;22890:34;22941:19;;23263:91:1::1;22740:226:2::0;23263:91:1::1;23171:282;;;23420:2;23410:8:::0;23379:30:::1;4101:10:::0;23396:12:::1;4021:98:::0;23379:30:::1;:39;;;;:::i;:::-;:43;;23371:82;;;::::0;-1:-1:-1;;;23371:82:1;;22413:2:2;23371:82:1::1;::::0;::::1;22395:21:2::0;22452:2;22432:18;;;22425:30;22491:28;22471:18;;;22464:56;22537:18;;23371:82:1::1;22385:176:2::0;23371:82:1::1;23494:4;23483:8;23472:10;;:19;;;;:::i;:::-;:26;;23464:68;;;::::0;-1:-1:-1;;;23464:68:1;;22055:2:2;23464:68:1::1;::::0;::::1;22037:21:2::0;22094:2;22074:18;;;22067:30;22133:31;22113:18;;;22106:59;22182:18;;23464:68:1::1;22027:179:2::0;23464:68:1::1;23547:10;::::0;::::1;;23543:208;;;23602:5;::::0;23580:18:::1;23590:8:::0;23580:9:::1;:18;:::i;:::-;:27;;23572:71;;;::::0;-1:-1:-1;;;23572:71:1;;13078:2:2;23572:71:1::1;::::0;::::1;13060:21:2::0;13117:2;13097:18;;;13090:30;13156:33;13136:18;;;13129:61;13207:18;;23572:71:1::1;13050:181:2::0;23572:71:1::1;23543:208;;;23703:12;::::0;23681:18:::1;23691:8:::0;23681:9:::1;:18;:::i;:::-;:34;;23673:78;;;::::0;-1:-1:-1;;;23673:78:1;;13078:2:2;23673:78:1::1;::::0;::::1;13060:21:2::0;13117:2;13097:18;;;13090:30;13156:33;13136:18;;;13129:61;13207:18;;23673:78:1::1;13050:181:2::0;23673:78:1::1;23781:7;::::0;:33:::1;::::0;23763:12:::1;::::0;23781:7:::1;::::0;::::1;-1:-1:-1::0;;;;;23781:7:1::1;::::0;23800:9:::1;::::0;23763:12;23781:33;23763:12;23781:33;23800:9;23781:7;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23762:52;;;23833:7;23825:16;;;::::0;::::1;;23853:13;::::0;23871:115:::1;23892:8;23888:1;:12;23871:115;;;23924:10;::::0;:14:::1;::::0;23937:1:::1;23924:14;:::i;:::-;23913:25:::0;-1:-1:-1;23944:29:1::1;4101:10:::0;23964:8:::1;23944:5;:29::i;:::-;23902:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23871:115;;;-1:-1:-1::0;18292:4:1;:12;;-1:-1:-1;;18292:12:1;;;24007:4:::1;::::0;24012:8;;-1:-1:-1;22937:1092:1;-1:-1:-1;;;22937:1092:1:o;19184:224::-;19242:4;19267:34;-1:-1:-1;;;;;;;;;;;4101:10:1;5158:139;:::i;19267:34::-;19259:90;;;;-1:-1:-1;;;19259:90:1;;;;;;;:::i;:::-;19360:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;19394:4:1;;19184:224;-1:-1:-1;;19184:224:1:o;9028:239::-;9100:7;9136:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9136:16:1;9171:19;9163:73;;;;-1:-1:-1;;;9163:73:1;;16231:2:2;9163:73:1;;;16213:21:2;16270:2;16250:18;;;16243:30;16309:34;16289:18;;;16282:62;-1:-1:-1;;;16360:18:2;;;16353:39;16409:19;;9163:73:1;16203:231:2;8812:208:1;8884:7;-1:-1:-1;;;;;8912:19:1;;8904:74;;;;-1:-1:-1;;;8904:74:1;;15820:2:2;8904:74:1;;;15802:21:2;15859:2;15839:18;;;15832:30;15898:34;15878:18;;;15871:62;-1:-1:-1;;;15949:18:2;;;15942:40;15999:19;;8904:74:1;15792:232:2;8904:74:1;-1:-1:-1;;;;;;8996:16:1;;;;;:9;:16;;;;;;;8812:208::o;20149:280::-;20206:4;20230:41;4101:10;20249:12;20263:7;20230:18;:41::i;:::-;20222:89;;;;-1:-1:-1;;;20222:89:1;;;;;;;:::i;:::-;20329:19;;;;:10;:19;;;;;;20322:26;;;;;;;;-1:-1:-1;;;;;;20322:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;20364:35;20329:19;;4101:10;;20364:35;;20329:19;20364:35;-1:-1:-1;20417:4:1;;20149:280;-1:-1:-1;20149:280:1:o;20439:1016::-;18207:4;;20508;;18207;;18206:5;18198:49;;;;-1:-1:-1;;;18198:49:1;;;;;;;:::i;:::-;18258:4;:11;;-1:-1:-1;;18258:11:1;18265:4;18258:11;;;20532:16:::1;20540:7:::0;20532::::1;:16::i;:::-;20524:53;;;::::0;-1:-1:-1;;;20524:53:1;;14625:2:2;20524:53:1::1;::::0;::::1;14607:21:2::0;14664:2;14644:18;;;14637:30;-1:-1:-1;;;14683:18:2;;;14676:54;14747:18;;20524:53:1::1;14597:174:2::0;20524:53:1::1;20588:20;20611:19:::0;;;:10:::1;:19;::::0;;;;;;;;20588:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;20588:42:1;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;20641:62:::1;;;::::0;-1:-1:-1;;;20641:62:1;;20132:2:2;20641:62:1::1;::::0;::::1;20114:21:2::0;20171:2;20151:18;;;20144:30;-1:-1:-1;;;20190:18:2;;;20183:55;20255:18;;20641:62:1::1;20104:175:2::0;20641:62:1::1;20723:41;4101:10:::0;20742:12:::1;20756:7;20723:18;:41::i;:::-;20722:42;20714:79;;;::::0;-1:-1:-1;;;20714:79:1;;16641:2:2;20714:79:1::1;::::0;::::1;16623:21:2::0;16680:2;16660:18;;;16653:30;16719:26;16699:18;;;16692:54;16763:18;;20714:79:1::1;16613:174:2::0;20714:79:1::1;20808:12;::::0;::::1;::::0;-1:-1:-1;;;;;20808:28:1::1;4101:10:::0;20808:28:::1;20804:399;;;20872:1;20860:9;:13;20852:55;;;::::0;-1:-1:-1;;;20852:55:1;;17768:2:2;20852:55:1::1;::::0;::::1;17750:21:2::0;17807:2;17787:18;;;17780:30;17846:32;17826:18;;;17819:60;17896:18;;20852:55:1::1;17740:180:2::0;20852:55:1::1;20941:16;::::0;::::1;::::0;:31:::1;::::0;20962:9:::1;20941:20;:31::i;:::-;20922:16;::::0;::::1;:50:::0;20804:399:::1;;;21025:5;:14;;;21012:9;:27;;:59;;;;;21055:5;:16;;;21043:9;:28;21012:59;21004:102;;;::::0;-1:-1:-1;;;21004:102:1;;17768:2:2;21004:102:1::1;::::0;::::1;17750:21:2::0;17807:2;17787:18;;;17780:30;17846:32;17826:18;;;17819:60;17896:18;;21004:102:1::1;17740:180:2::0;21004:102:1::1;21140:9;21121:16;::::0;::::1;:28:::0;4101:10;21164:12:::1;::::0;::::1;:27:::0;20804:399:::1;21240:39;21269:9;21240:10;:24;4101:10:::0;21251:12:::1;-1:-1:-1::0;;;;;21240:24:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21240:24:1;;;:28:::1;:39::i;:::-;4101:10:::0;21213:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:66;;;;21290:19;;;:10:::1;:19:::0;;;;;:27;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;21290:27:1;;::::1;-1:-1:-1::0;;;;;;21290:27:1;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;21333:31;;21354:9:::1;::::0;21333:31:::1;::::0;::::1;21417:7;21400:5;:16;;;21387:12;4101:10:::0;;4021:98;21387:12:::1;-1:-1:-1::0;;;;;21380:45:1::1;;;;;;;;;;;-1:-1:-1::0;;18292:4:1;:12;;-1:-1:-1;;18292:12:1;;;-1:-1:-1;21443:4:1::1;::::0;20439:1016::o;19805:336::-;19869:4;19893:41;4101:10;19912:12;4021:98;19893:41;19885:89;;;;-1:-1:-1;;;19885:89:1;;;;;;;:::i;:::-;20006:51;;;;;;;;20014:7;20006:51;;;;20022:12;4101:10;;4021:98;20022:12;-1:-1:-1;;;;;20006:51:1;;;;;20043:1;20006:51;;;;;;;;;;;;;;;;;;;;;19985:19;;;:10;:19;;;;;;:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19985:72:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20046:8;19996:7;20081:12;4101:10;;4021:98;20081:12;-1:-1:-1;;;;;20073:38:1;;;;;;;;;;;-1:-1:-1;20129:4:1;19805:336;;;;:::o;5158:139::-;5236:4;5260:12;;;;;;;;;;;-1:-1:-1;;;;;5260:29:1;;;;;;;;;;;;;;;5158:139::o;9383:104::-;9439:13;9472:7;9465:14;;;;;:::i;10601:295::-;-1:-1:-1;;;;;10704:24:1;;4101:10;10704:24;;10696:62;;;;-1:-1:-1;;;10696:62:1;;12369:2:2;10696:62:1;;;12351:21:2;12408:2;12388:18;;;12381:30;12447:27;12427:18;;;12420:55;12492:18;;10696:62:1;12341:175:2;10696:62:1;4101:10;10771:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10771:42:1;;;;;;;;;;;;:53;;-1:-1:-1;;10771:53:1;;;;;;;;;;10840:48;;8307:41:2;;;10771:42:1;;4101:10;10840:48;;8280:18:2;10840:48:1;;;;;;;10601:295;;:::o;22699:229::-;22748:34;-1:-1:-1;;;;;;;;;;;4101:10:1;5158:139;:::i;22748:34::-;22740:90;;;;-1:-1:-1;;;22740:90:1;;;;;;;:::i;:::-;22850:10;;;;22849:11;22841:20;;;;;;22872:10;:17;;-1:-1:-1;;22872:17:1;22885:4;22872:17;;;22905:15;;;;22872:10;;22905:15;22699:229::o;11495:285::-;11627:41;4101:10;11646:12;4021:98;11627:41;11619:103;;;;-1:-1:-1;;;11619:103:1;;;;;;;:::i;:::-;11733:39;11747:4;11753:2;11757:7;11766:5;11733:13;:39::i;:::-;11495:285;;;;:::o;9594:256::-;9667:13;9701:16;9709:7;9701;:16::i;:::-;9693:76;;;;-1:-1:-1;;;9693:76:1;;18897:2:2;9693:76:1;;;18879:21:2;18936:2;18916:18;;;18909:30;18975:34;18955:18;;;18948:62;-1:-1:-1;;;19026:18:2;;;19019:45;19081:19;;9693:76:1;18869:237:2;9693:76:1;9811:10;:8;:10::i;:::-;9823:17;9832:7;9823:8;:17::i;:::-;9794:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9780:62;;9594:256;;;:::o;24439:169::-;24513:39;24542:9;24513:10;:24;4101:10;24524:12;4021:98;24513:39;4101:10;24486:24;;;;:10;:24;;;;;;:66;;;;24568:32;;24590:9;;24568:32;;;24439:169::o;5676:235::-;5371:7;5398:12;;;;;;;;;;:22;;;5770:41;;5778:18;5305:123;5770:41;5762:102;;;;-1:-1:-1;;;5762:102:1;;14978:2:2;5762:102:1;;;14960:21:2;15017:2;14997:18;;;14990:30;15056:34;15036:18;;;15029:62;-1:-1:-1;;;15107:18:2;;;15100:46;15163:19;;5762:102:1;14950:238:2;18981:195:1;19047:34;-1:-1:-1;;;;;;;;;;;4101:10:1;5158:139;:::i;19047:34::-;19039:94;;;;-1:-1:-1;;;19039:94:1;;14209:2:2;19039:94:1;;;14191:21:2;14248:2;14228:18;;;14221:30;14287:34;14267:18;;;14260:62;-1:-1:-1;;;14338:18:2;;;14331:45;14393:19;;19039:94:1;14181:237:2;19039:94:1;19144:14;:24;;;;;;;-1:-1:-1;;19144:24:1;;;;;;;;;18981:195::o;7934:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21463:1228::-;18207:4;;21526;;18207;;18206:5;18198:49;;;;-1:-1:-1;;;18198:49:1;;;;;;;:::i;:::-;18258:4;:11;;-1:-1:-1;;18258:11:1;18265:4;18258:11;;;;;;21551:14;::::1;18258:11:::0;21551:14:::1;21550:15;21542:24;;;::::0;::::1;;21585:16;21593:7;21585;:16::i;:::-;21577:53;;;::::0;-1:-1:-1;;;21577:53:1;;14625:2:2;21577:53:1::1;::::0;::::1;14607:21:2::0;14664:2;14644:18;;;14637:30;-1:-1:-1;;;14683:18:2;;;14676:54;14747:18;;21577:53:1::1;14597:174:2::0;21577:53:1::1;21641:20;21664:19:::0;;;:10:::1;:19;::::0;;;;;;;;21641:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;21641:42:1;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;21694:62:::1;;;::::0;-1:-1:-1;;;21694:62:1;;20132:2:2;21694:62:1::1;::::0;::::1;20114:21:2::0;20171:2;20151:18;;;20144:30;-1:-1:-1;;;20190:18:2;;;20183:55;20255:18;;21694:62:1::1;20104:175:2::0;21694:62:1::1;21775:41;4101:10:::0;21794:12:::1;4021:98:::0;21775:41:::1;21767:95;;;::::0;-1:-1:-1;;;21767:95:1;;19313:2:2;21767:95:1::1;::::0;::::1;19295:21:2::0;19352:2;19332:18;;;19325:30;19391:34;19371:18;;;19364:62;-1:-1:-1;;;19442:18:2;;;19435:39;19491:19;;21767:95:1::1;19285:231:2::0;21767:95:1::1;21909:16;::::0;::::1;::::0;21892:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21881:24:1::1;;::::0;;;:10:::1;:24;::::0;;;:44:::1;;21873:96;;;::::0;-1:-1:-1;;;21873:96:1;;19723:2:2;21873:96:1::1;::::0;::::1;19705:21:2::0;19762:2;19742:18;;;19735:30;19801:34;19781:18;;;19774:62;-1:-1:-1;;;19852:18:2;;;19845:38;19900:19;;21873:96:1::1;19695:230:2::0;21873:96:1::1;21987:19;::::0;;;:10:::1;:19;::::0;;;;21980:26;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;21980:26:1;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;22041:16:::1;::::0;::::1;::::0;:22:::1;::::0;22060:3:::1;::::0;22041:22:::1;:::i;:::-;:41;;;;:::i;:::-;22149:16;::::0;::::1;::::0;22131:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;22120:24:1::1;;::::0;;;:10:::1;:24;::::0;;;22017:65;;-1:-1:-1;22120:46:1::1;::::0;:24;:28:::1;:46::i;:::-;22104:12;::::0;;::::1;::::0;-1:-1:-1;;;;;22093:24:1::1;;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;22233:16:::1;::::0;::::1;::::0;22204:46:::1;::::0;22233:16;;22093:10;4101;22215:12:::1;4021:98:::0;22204:46:::1;4101:10:::0;22177:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;22288:43:::1;::::0;22317:13;;22177:10;;:24;22299:12:::1;4021:98:::0;22288:43:::1;4101:10:::0;22261:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:70;;;;22361:7:::1;::::0;:37;;22261:24;;22361:7:::1;::::0;::::1;-1:-1:-1::0;;;;;22361:7:1::1;::::0;22380:13;;22261:24;22361:37;22261:24;22361:37;22380:13;22361:7;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22342:56;;;22417:7;22409:16;;;::::0;::::1;;22436:43;22446:5;:11;;;22458:5;:12;;;22471:7;22436:9;:43::i;:::-;22495:35;::::0;22522:7;;4101:10;;22495:35:::1;::::0;;;::::1;22578:16;::::0;::::1;::::0;22565:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;22546:57:1::1;4101:10:::0;-1:-1:-1;;;;;22546:57:1::1;;22595:7;22546:57;;;;8768:25:2::0;;8756:2;8741:18;;8723:76;22546:57:1::1;;;;;;;;22653:7;22640:5;:12;;;-1:-1:-1::0;;;;;22619:42:1::1;22628:5;:11;;;-1:-1:-1::0;;;;;22619:42:1::1;;;;;;;;;;;-1:-1:-1::0;;18292:4:1;:12;;-1:-1:-1;;18292:12:1;;;-1:-1:-1;22679:4:1::1;::::0;21463:1228;-1:-1:-1;;21463:1228:1:o;19416:247::-;19483:4;19507:34;-1:-1:-1;;;;;;;;;;;4101:10:1;5158:139;:::i;19507:34::-;19499:98;;;;-1:-1:-1;;;19499:98:1;;10779:2:2;19499:98:1;;;10761:21:2;10818:2;10798:18;;;10791:30;10857:34;10837:18;;;10830:62;-1:-1:-1;;;10908:18:2;;;10901:49;10967:19;;19499:98:1;10751:241:2;19499:98:1;-1:-1:-1;19608:7:1;:25;;-1:-1:-1;;;;;19608:25:1;;;;;-1:-1:-1;;;;;;19608:25:1;;;;;;;;;:7;;19416:247::o;8497:307::-;8614:4;-1:-1:-1;;;;;;8638:40:1;;-1:-1:-1;;;8638:40:1;;:105;;-1:-1:-1;;;;;;;8695:48:1;;-1:-1:-1;;;8695:48:1;8638:105;:158;;;;8760:36;8784:11;8760:23;:36::i;12068:127::-;12133:4;12157:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12157:16:1;:30;;;12068:127::o;16440:174::-;16515:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16515:29:1;-1:-1:-1;;;;;16515:29:1;;;;;;;;:24;;16569:23;16515:24;16569:14;:23::i;:::-;-1:-1:-1;;;;;16560:46:1;;;;;;;;;;;16440:174;;:::o;12203:348::-;12296:4;12321:16;12329:7;12321;:16::i;:::-;12313:73;;;;-1:-1:-1;;;12313:73:1;;13796:2:2;12313:73:1;;;13778:21:2;13835:2;13815:18;;;13808:30;13874:34;13854:18;;;13847:62;-1:-1:-1;;;13925:18:2;;;13918:42;13977:19;;12313:73:1;13768:234:2;12313:73:1;12397:13;12413:23;12428:7;12413:14;:23::i;:::-;12397:39;;12466:5;-1:-1:-1;;;;;12455:16:1;:7;-1:-1:-1;;;;;12455:16:1;;:51;;;;12499:7;-1:-1:-1;;;;;12475:31:1;:20;12487:7;12475:11;:20::i;:::-;-1:-1:-1;;;;;12475:31:1;;12455:51;:87;;;-1:-1:-1;;;;;;11025:25:1;;;11001:4;11025:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;12510:32;12447:96;12203:348;-1:-1:-1;;;;12203:348:1:o;15879:553::-;16004:4;-1:-1:-1;;;;;15977:31:1;:23;15992:7;15977:14;:23::i;:::-;-1:-1:-1;;;;;15977:31:1;;15969:85;;;;-1:-1:-1;;;15969:85:1;;18127:2:2;15969:85:1;;;18109:21:2;18166:2;18146:18;;;18139:30;18205:34;18185:18;;;18178:62;-1:-1:-1;;;18256:18:2;;;18249:39;18305:19;;15969:85:1;18099:231:2;15969:85:1;-1:-1:-1;;;;;16073:16:1;;16065:65;;;;-1:-1:-1;;;16065:65:1;;11964:2:2;16065:65:1;;;11946:21:2;12003:2;11983:18;;;11976:30;12042:34;12022:18;;;12015:62;-1:-1:-1;;;12093:18:2;;;12086:34;12137:19;;16065:65:1;11936:226:2;16065:65:1;16195:29;16212:1;16216:7;16195:8;:29::i;:::-;16245;16260:4;16266:7;16245:14;:29::i;:::-;16285:24;16297:2;16301:7;16285:11;:24::i;:::-;-1:-1:-1;;;;;16322:15:1;;;;;;:9;:15;;;;;:20;;16341:1;;16322:15;:20;;16341:1;;16322:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16353:13:1;;;;;;:9;:13;;;;;:18;;16370:1;;16353:13;:18;;16370:1;;16353:18;:::i;:::-;;;;-1:-1:-1;;16397:27:1;;16416:7;;-1:-1:-1;;;;;16397:27:1;;;;;;;;;;;;;15879:553;;;:::o;14601:485::-;-1:-1:-1;;;;;14681:16:1;;14673:61;;;;-1:-1:-1;;;14673:61:1;;16994:2:2;14673:61:1;;;16976:21:2;;;17013:18;;;17006:30;17072:34;17052:18;;;17045:62;17124:18;;14673:61:1;16966:182:2;14673:61:1;14754:16;14762:7;14754;:16::i;:::-;14753:17;14745:58;;;;-1:-1:-1;;;14745:58:1;;10422:2:2;14745:58:1;;;10404:21:2;10461:2;10441:18;;;10434:30;10500;10480:18;;;10473:58;10548:18;;14745:58:1;10394:178:2;14745:58:1;-1:-1:-1;;;;;14874:13:1;;;;;;:9;:13;;;;;:18;;14891:1;;14874:13;:18;;14891:1;;14874:18;:::i;:::-;;;;;;;;14917:1;14903:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14929:18:1;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;14972:24;14944:2;14953:7;14972:11;:24::i;:::-;15012:17;;-1:-1:-1;;;;;15012:17:1;;;15017:7;;15012:17;;;;;15045:33;;15070:7;;-1:-1:-1;;;;;15045:33:1;;;15062:1;;15045:33;;15062:1;;15045:33;14601:485;;:::o;1114:124::-;1172:7;1205:1;1200;:6;;1192:15;;;;;;1225:5;1229:1;1225;:5;:::i;:::-;1218:12;1114:124;-1:-1:-1;;;1114:124:1:o;6468:229::-;6543:22;6551:4;6557:7;6543;:22::i;:::-;6538:152;;6582:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6582:29:1;;;;;;;;;:36;;-1:-1:-1;;6582:36:1;6614:4;6582:36;;;6665:12;4101:10;;4021:98;6665:12;-1:-1:-1;;;;;6638:40:1;6656:7;-1:-1:-1;;;;;6638:40:1;6650:4;6638:40;;;;;;;;;;6468:229;;:::o;6705:230::-;6780:22;6788:4;6794:7;6780;:22::i;:::-;6776:152;;;6851:5;6819:12;;;;;;;;;;;-1:-1:-1;;;;;6819:29:1;;;;;;;;;;:37;;-1:-1:-1;;6819:37:1;;;6876:40;4101:10;;6819:12;;6876:40;;6851:5;6876:40;6705:230;;:::o;1313:142::-;1371:9;1397:5;1401:1;1397;:5;:::i;:::-;1393:9;;1426:1;1421;:6;;1413:15;;;;;11788:272;11902:28;11912:4;11918:2;11922:7;11902:9;:28::i;:::-;11949:48;11972:4;11978:2;11982:7;11991:5;11949:22;:48::i;:::-;11941:111;;;;-1:-1:-1;;;11941:111:1;;;;;;;:::i;9858:99::-;9909:13;9942:7;9935:14;;;;;:::i;12935:545::-;12991:13;13034:10;13030:53;;-1:-1:-1;;13061:10:1;;;;;;;;;;;;-1:-1:-1;;;13061:10:1;;;;;12935:545::o;13030:53::-;13108:5;13093:12;13149:78;13156:9;;13149:78;;13182:8;;;;:::i;:::-;;-1:-1:-1;13205:10:1;;-1:-1:-1;13213:2:1;13205:10;;:::i;:::-;;;13149:78;;;13237:19;13269:6;13259:17;;;;;;-1:-1:-1;;;13259:17:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13259:17:1;;13237:39;;13287:154;13294:10;;13287:154;;13321:11;13331:1;13321:11;;:::i;:::-;;-1:-1:-1;13390:10:1;13398:2;13390:5;:10;:::i;:::-;13377:24;;:2;:24;:::i;:::-;13364:39;;13347:6;13354;13347:14;;;;;;-1:-1:-1;;;13347:14:1;;;;;;;;;;;;:56;-1:-1:-1;;;;;13347:56:1;;;;;;;;-1:-1:-1;13418:11:1;13427:2;13418:11;;:::i;:::-;;;13287:154;;4933:217;5018:4;-1:-1:-1;;;;;;5042:47:1;;-1:-1:-1;;;5042:47:1;;:100;;-1:-1:-1;;;;;;;;;;4283:40:1;;;5106:36;4174:157;13792:691;13877:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;13877:26:1;;;:17;;:26;13869:55;;;;-1:-1:-1;;;13869:55:1;;20486:2:2;13869:55:1;;;20468:21:2;20525:2;20505:18;;;20498:30;-1:-1:-1;;;20544:18:2;;;20537:46;20600:18;;13869:55:1;20458:166:2;13869:55:1;13942:17;;;;:7;:17;;;;;;;;13935:24;;-1:-1:-1;;;;;;13935:24:1;;;;;;13977:10;:20;;;;;13970:27;;;13935:24;13970:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14037:14;:24;;;;;;-1:-1:-1;;;;;14097:17:1;;;;:10;:17;;;;;;:24;14037;;13942:17;14097:31;;:28;:31::i;:::-;14072:56;;14163:18;14145:14;:36;14141:247;;-1:-1:-1;;;;;14218:17:1;;14198;14218;;;:10;:17;;;;;:33;;14236:14;;14218:33;;;;-1:-1:-1;;;14218:33:1;;;;;;;;;;;;;;;;;14198:53;;14306:9;14266:10;:17;14277:5;-1:-1:-1;;;;;14266:17:1;-1:-1:-1;;;;;14266:17:1;;;;;;;;;;;;14284:18;14266:37;;;;;;-1:-1:-1;;;14266:37:1;;;;;;;;;;;;;;;;;;;;:49;;;;14330:25;;;:14;:25;;;;;:46;;;14141:247;-1:-1:-1;;;;;14400:17:1;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;14400:23:1;;;;;;;;;;;;;;;;;;;;;;;;;;14466:8;14453:12;4101:10;;4021:98;14453:12;-1:-1:-1;;;;;14439:36:1;;;;;;;;;;;13792:691;;;;:::o;13490:294::-;13599:1;13570:17;;;:7;:17;;;;;;-1:-1:-1;;;;;13570:17:1;:31;13562:70;;;;-1:-1:-1;;;13562:70:1;;12723:2:2;13562:70:1;;;12705:21:2;12762:2;12742:18;;;12735:30;12801:28;12781:18;;;12774:56;12847:18;;13562:70:1;12695:176:2;13562:70:1;13643:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;13643:23:1;-1:-1:-1;;;;;13643:23:1;;;;;;;;13679:15;;;:10;:15;;;;;:30;;-1:-1:-1;13679:30:1;;;;;;;;;;;;;;;13747:15;;:22;;:29;;:26;:29::i;:::-;13720:24;;;;:14;:24;;;;;;:56;-1:-1:-1;13490:294:1:o;16622:843::-;16743:4;-1:-1:-1;;;;;16769:13:1;;235:20;274:8;16765:693;;16805:72;;-1:-1:-1;;;16805:72:1;;-1:-1:-1;;;;;16805:36:1;;;;;:72;;4101:10;;16856:4;;16862:7;;16871:5;;16805:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16805:72:1;;;;;;;;-1:-1:-1;;16805:72:1;;;;;;;;;;;;:::i;:::-;;;16801:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17051:13:1;;17047:341;;17094:60;;-1:-1:-1;;;17094:60:1;;;;;;;:::i;17047:341::-;17338:6;17332:13;17323:6;17319:2;17315:15;17308:38;16801:602;-1:-1:-1;;;;;;16928:55:1;-1:-1:-1;;;16928:55:1;;-1:-1:-1;16921:62:1;;16765:693;-1:-1:-1;17442:4:1;16622:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:2;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:2;;;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:2;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:196::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:29;1008:9;989:29;:::i;1029:270::-;1097:6;1105;1158:2;1146:9;1137:7;1133:23;1129:32;1126:2;;;1179:6;1171;1164:22;1126:2;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1116:183;;;;;:::o;1304:338::-;1381:6;1389;1397;1450:2;1438:9;1429:7;1425:23;1421:32;1418:2;;;1471:6;1463;1456:22;1418:2;1499:29;1518:9;1499:29;:::i;:::-;1489:39;;1547:38;1581:2;1570:9;1566:18;1547:38;:::i;:::-;1537:48;;1632:2;1621:9;1617:18;1604:32;1594:42;;1408:234;;;;;:::o;1647:696::-;1742:6;1750;1758;1766;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1869:29;1888:9;1869:29;:::i;:::-;1859:39;;1917:38;1951:2;1940:9;1936:18;1917:38;:::i;:::-;1907:48;;2002:2;1991:9;1987:18;1974:32;1964:42;;2057:2;2046:9;2042:18;2029:32;2084:18;2076:6;2073:30;2070:2;;;2121:6;2113;2106:22;2070:2;2149:22;;2202:4;2194:13;;2190:27;-1:-1:-1;2180:2:2;;2236:6;2228;2221:22;2180:2;2264:73;2329:7;2324:2;2311:16;2306:2;2302;2298:11;2264:73;:::i;:::-;2254:83;;;1777:566;;;;;;;:::o;2348:325::-;2413:6;2421;2474:2;2462:9;2453:7;2449:23;2445:32;2442:2;;;2495:6;2487;2480:22;2442:2;2523:29;2542:9;2523:29;:::i;:::-;2513:39;;2602:2;2591:9;2587:18;2574:32;2615:28;2637:5;2615:28;:::i;:::-;2662:5;2652:15;;;2432:241;;;;;:::o;2678:264::-;2746:6;2754;2807:2;2795:9;2786:7;2782:23;2778:32;2775:2;;;2828:6;2820;2813:22;2775:2;2856:29;2875:9;2856:29;:::i;:::-;2846:39;2932:2;2917:18;;;;2904:32;;-1:-1:-1;;;2765:177:2:o;2947:251::-;3003:6;3056:2;3044:9;3035:7;3031:23;3027:32;3024:2;;;3077:6;3069;3062:22;3024:2;3121:9;3108:23;3140:28;3162:5;3140:28;:::i;3203:255::-;3270:6;3323:2;3311:9;3302:7;3298:23;3294:32;3291:2;;;3344:6;3336;3329:22;3291:2;3381:9;3375:16;3400:28;3422:5;3400:28;:::i;3463:190::-;3522:6;3575:2;3563:9;3554:7;3550:23;3546:32;3543:2;;;3596:6;3588;3581:22;3543:2;-1:-1:-1;3624:23:2;;3533:120;-1:-1:-1;3533:120:2:o;3658:264::-;3726:6;3734;3787:2;3775:9;3766:7;3762:23;3758:32;3755:2;;;3808:6;3800;3793:22;3755:2;3849:9;3836:23;3826:33;;3878:38;3912:2;3901:9;3897:18;3878:38;:::i;3927:255::-;3985:6;4038:2;4026:9;4017:7;4013:23;4009:32;4006:2;;;4059:6;4051;4044:22;4006:2;4103:9;4090:23;4122:30;4146:5;4122:30;:::i;4187:259::-;4256:6;4309:2;4297:9;4288:7;4284:23;4280:32;4277:2;;;4330:6;4322;4315:22;4277:2;4367:9;4361:16;4386:30;4410:5;4386:30;:::i;4451:480::-;4520:6;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4594:6;4586;4579:22;4541:2;4639:9;4626:23;4672:18;4664:6;4661:30;4658:2;;;4709:6;4701;4694:22;4658:2;4737:22;;4790:4;4782:13;;4778:27;-1:-1:-1;4768:2:2;;4824:6;4816;4809:22;4768:2;4852:73;4917:7;4912:2;4899:16;4894:2;4890;4886:11;4852:73;:::i;5400:258::-;5468:6;5476;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5550:6;5542;5535:22;5497:2;-1:-1:-1;;5578:23:2;;;5648:2;5633:18;;;5620:32;;-1:-1:-1;5487:171:2:o;5663:257::-;5704:3;5742:5;5736:12;5769:6;5764:3;5757:19;5785:63;5841:6;5834:4;5829:3;5825:14;5818:4;5811:5;5807:16;5785:63;:::i;:::-;5902:2;5881:15;-1:-1:-1;;5877:29:2;5868:39;;;;5909:4;5864:50;;5712:208;-1:-1:-1;;5712:208:2:o;5925:470::-;6104:3;6142:6;6136:13;6158:53;6204:6;6199:3;6192:4;6184:6;6180:17;6158:53;:::i;:::-;6274:13;;6233:16;;;;6296:57;6274:13;6233:16;6330:4;6318:17;;6296:57;:::i;:::-;6369:20;;6112:283;-1:-1:-1;;;;6112:283:2:o;7034:488::-;-1:-1:-1;;;;;7303:15:2;;;7285:34;;7355:15;;7350:2;7335:18;;7328:43;7402:2;7387:18;;7380:34;;;7450:3;7445:2;7430:18;;7423:31;;;7228:4;;7471:45;;7496:19;;7488:6;7471:45;:::i;:::-;7463:53;7237:285;-1:-1:-1;;;;;;7237:285:2:o;7527:635::-;7698:2;7750:21;;;7820:13;;7723:18;;;7842:22;;;7669:4;;7698:2;7921:15;;;;7895:2;7880:18;;;7669:4;7967:169;7981:6;7978:1;7975:13;7967:169;;;8042:13;;8030:26;;8111:15;;;;8076:12;;;;8003:1;7996:9;7967:169;;;-1:-1:-1;8153:3:2;;7678:484;-1:-1:-1;;;;;;7678:484:2:o;8804:219::-;8953:2;8942:9;8935:21;8916:4;8973:44;9013:2;9002:9;8998:18;8990:6;8973:44;:::i;9444:414::-;9646:2;9628:21;;;9685:2;9665:18;;;9658:30;9724:34;9719:2;9704:18;;9697:62;-1:-1:-1;;;9790:2:2;9775:18;;9768:48;9848:3;9833:19;;9618:240::o;11350:407::-;11552:2;11534:21;;;11591:2;11571:18;;;11564:30;11630:34;11625:2;11610:18;;11603:62;-1:-1:-1;;;11696:2:2;11681:18;;11674:41;11747:3;11732:19;;11524:233::o;20629:399::-;20831:2;20813:21;;;20870:2;20850:18;;;20843:30;20909:34;20904:2;20889:18;;20882:62;-1:-1:-1;;;20975:2:2;20960:18;;20953:33;21018:3;21003:19;;20803:225::o;21435:413::-;21637:2;21619:21;;;21676:2;21656:18;;;21649:30;21715:34;21710:2;21695:18;;21688:62;-1:-1:-1;;;21781:2:2;21766:18;;21759:47;21838:3;21823:19;;21609:239::o;22971:355::-;23173:2;23155:21;;;23212:2;23192:18;;;23185:30;23251:33;23246:2;23231:18;;23224:61;23317:2;23302:18;;23145:181::o;24453:128::-;24493:3;24524:1;24520:6;24517:1;24514:13;24511:2;;;24530:18;;:::i;:::-;-1:-1:-1;24566:9:2;;24501:80::o;24586:120::-;24626:1;24652;24642:2;;24657:18;;:::i;:::-;-1:-1:-1;24691:9:2;;24632:74::o;24711:168::-;24751:7;24817:1;24813;24809:6;24805:14;24802:1;24799:21;24794:1;24787:9;24780:17;24776:45;24773:2;;;24824:18;;:::i;:::-;-1:-1:-1;24864:9:2;;24763:116::o;24884:125::-;24924:4;24952:1;24949;24946:8;24943:2;;;24957:18;;:::i;:::-;-1:-1:-1;24994:9:2;;24933:76::o;25014:258::-;25086:1;25096:113;25110:6;25107:1;25104:13;25096:113;;;25186:11;;;25180:18;25167:11;;;25160:39;25132:2;25125:10;25096:113;;;25227:6;25224:1;25221:13;25218:2;;;-1:-1:-1;;25262:1:2;25244:16;;25237:27;25067:205::o;25277:380::-;25356:1;25352:12;;;;25399;;;25420:2;;25474:4;25466:6;25462:17;25452:27;;25420:2;25527;25519:6;25516:14;25496:18;25493:38;25490:2;;;25573:10;25568:3;25564:20;25561:1;25554:31;25608:4;25605:1;25598:15;25636:4;25633:1;25626:15;25490:2;;25332:325;;;:::o;25662:135::-;25701:3;-1:-1:-1;;25722:17:2;;25719:2;;;25742:18;;:::i;:::-;-1:-1:-1;25789:1:2;25778:13;;25709:88::o;25802:112::-;25834:1;25860;25850:2;;25865:18;;:::i;:::-;-1:-1:-1;25899:9:2;;25840:74::o;25919:127::-;25980:10;25975:3;25971:20;25968:1;25961:31;26011:4;26008:1;26001:15;26035:4;26032:1;26025:15;26051:127;26112:10;26107:3;26103:20;26100:1;26093:31;26143:4;26140:1;26133:15;26167:4;26164:1;26157:15;26183:127;26244:10;26239:3;26235:20;26232:1;26225:31;26275:4;26272:1;26265:15;26299:4;26296:1;26289:15;26315:118;26401:5;26394:13;26387:21;26380:5;26377:32;26367:2;;26423:1;26420;26413:12;26367:2;26357:76;:::o;26438:131::-;-1:-1:-1;;;;;;26512:32:2;;26502:43;;26492:2;;26559:1;26556;26549:12

Swarm Source

ipfs://c3f9647eb38df3e0e017a7789de0955be90e30fdf559af4cfbeb09849f09bb94

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Cool Dogs are a collection of 5000 programmatically, randomly generated NFTs on the Ethereum blockchain.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.