ETH Price: $2,539.87 (+0.33%)

Token

NinjaKITTI (KITTI)
 

Overview

Max Total Supply

220 KITTI

Holders

113

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 KITTI
0xb7176c03739ec10c4ec8e21a64ad64b228b8a5f2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NinjaKITTI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-04
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    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 toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

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

abstract contract Pausable is Context {

    event Paused(address account);

    event Unpaused(address account);

    bool private _paused;

    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {
    
    function isContract(address account) internal view returns (bool) {
        
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


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

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

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


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

    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 IERC721Enumerable is IERC721 {
    
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;


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


    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) 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 tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

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

    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 {
        _setApprovalForAll(_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 _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;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, 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];

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

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

        emit Transfer(from, to, tokenId);
    }

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

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
 
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; 
            _ownedTokensIndex[lastTokenId] = tokenIndex; 
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; 
        _allTokensIndex[lastTokenId] = tokenIndex; 

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


contract NinjaKITTI is ERC721Enumerable, Ownable {
    using Strings for uint256;

    uint256 public constant MAX_KITTI = 10000;
    uint256 public constant PRESALE_PRICE = 0.05 ether;
    uint256 public constant PRICE = 0.07 ether;
    uint256 public constant FREEPASS_MAX_MINT = 1;
    uint256 public constant PRESALE_MAX_MINT = 3;
    uint256 public constant MAX_PER_MINT = 6;
    uint256 public constant MAX_KITTI_MINT = 12;
    uint256 public constant RESERVED_KITTI = 500;
    address public constant founderAddress = 0x820270a17869f10C6f637765fDd8bD0B41E7bad6;
    address public constant admin1Address = 0xeff9932b80bb0009b85144fFEB881788C1e41FFE;
    address public constant admin2Address = 0x501D29b7d66B7ca7C7EF2AfD1CcE5e52E40663A6;

    uint256 public reservedClaimed;

    uint256 public numKITTIMinted;

    string public baseTokenURI;

    bool public publicSaleStarted;
    bool public presaleStarted;

    mapping(address => bool) public _presaleEligible;
    mapping(address => bool) public _freepassEligible;
    mapping(address => uint256) public _totalClaimed;

    event BaseURIChanged(string baseURI);
    event PresaleMint(address minter, uint256 amountOfKITTI);
    event PublicSaleMint(address minter, uint256 amountOfKITTI);

    modifier whenPresaleStarted() {
        require(presaleStarted, "Presale has not started");
        _;
    }

    modifier whenPublicSaleStarted() {
        require(publicSaleStarted, "Public sale has not started");
        _;
    }

    constructor(string memory baseURI) ERC721("NinjaKITTI", "KITTI") {
        baseTokenURI = baseURI;
    }

    function claimReserved(address recipient, uint256 amount) external onlyOwner {
        require(reservedClaimed != RESERVED_KITTI, "Already have claimed all reserved KITTI");
        require(reservedClaimed + amount <= RESERVED_KITTI, "Minting would exceed max reserved KITTI");
        require(recipient != address(0), "Cannot add null address");
        require(totalSupply() < MAX_KITTI, "All tokens have been minted");
        require(totalSupply() + amount <= MAX_KITTI, "Minting would exceed max supply");

        uint256 _nextTokenId = numKITTIMinted + 1;

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(recipient, _nextTokenId + i);
        }
        numKITTIMinted += amount;
        reservedClaimed += amount;
    }

    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkPresaleEligiblity(address addr) external view returns (bool) {
        return _presaleEligible[addr];
    }

    function addToFreePass(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _freepassEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkFreePassEligiblity(address addr) external view returns (bool) {
        return _freepassEligible[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }

    function mintPresale(uint256 amountOfKITTI) external payable whenPresaleStarted {
        require(_presaleEligible[msg.sender], "You are not eligible for the presale");
        require(totalSupply() < MAX_KITTI, "All tokens have been minted");
        require(amountOfKITTI <= PRESALE_MAX_MINT, "Cannot purchase this many tokens during presale");
        require(totalSupply() + amountOfKITTI <= MAX_KITTI, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfKITTI <= PRESALE_MAX_MINT, "Purchase exceeds max allowed");
        require(amountOfKITTI > 0, "Must mint at least one KITTI");
        require(PRESALE_PRICE * amountOfKITTI == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfKITTI; i++) {
            uint256 tokenId = numKITTIMinted + 1;

            numKITTIMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfKITTI);
    }

    function mintFreePass(uint256 amountOfKITTI) external payable whenPresaleStarted {
        require(_freepassEligible[msg.sender], "You do not have a FREE PASS");
        require(totalSupply() < MAX_KITTI, "All tokens have been minted");
        require(amountOfKITTI <= FREEPASS_MAX_MINT, "Cannot purchase this many tokens during presale");
        require(totalSupply() + amountOfKITTI <= MAX_KITTI, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfKITTI <= FREEPASS_MAX_MINT, "Purchase exceeds max allowed");
        require(amountOfKITTI > 0, "Must mint at least one KITTI");

        for (uint256 i = 0; i < amountOfKITTI; i++) {
            uint256 tokenId = numKITTIMinted + 1;

            numKITTIMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfKITTI);
    }

    function mint(uint256 amountOfKITTI) external payable whenPublicSaleStarted {
        require(totalSupply() < MAX_KITTI, "All tokens have been minted");
        require(amountOfKITTI <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction");
        require(totalSupply() + amountOfKITTI <= MAX_KITTI, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfKITTI <= MAX_KITTI_MINT, "Purchase exceeds max allowed per address");
        require(amountOfKITTI > 0, "Must mint at least one KITTI");
        require(PRICE * amountOfKITTI == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfKITTI; i++) {
            uint256 tokenId = numKITTIMinted + 1;

            numKITTIMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PublicSaleMint(msg.sender, amountOfKITTI);
    }

    function togglePresaleStarted() external onlyOwner {
        presaleStarted = !presaleStarted;
    }

    function togglePublicSaleStarted() external onlyOwner {
        publicSaleStarted = !publicSaleStarted;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
        emit BaseURIChanged(baseURI);
    }

    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        _widthdraw(admin1Address, ((balance * 5) / 100));
        _widthdraw(admin2Address, ((balance * 5) / 100));
        _widthdraw(founderAddress, address(this).balance);
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to widthdraw Ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfKITTI","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfKITTI","type":"uint256"}],"name":"PublicSaleMint","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"},{"inputs":[],"name":"FREEPASS_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_KITTI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_KITTI_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_KITTI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_freepassEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_presaleEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToFreePass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin2Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkFreePassEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"founderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfKITTI","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfKITTI","type":"uint256"}],"name":"mintFreePass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfKITTI","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numKITTIMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","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":"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":"baseURI","type":"string"}],"name":"setBaseURI","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":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003634380380620036348339810160408190526200003491620001cf565b604080518082018252600a8152694e696e6a614b4954544960b01b6020808301918252835180850190945260058452644b4954544960d81b908401528151919291620000839160009162000129565b5080516200009990600190602084019062000129565b505050620000b6620000b0620000d360201b60201c565b620000d7565b8051620000cb90600d90602084019062000129565b5050620002fe565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013790620002ab565b90600052602060002090601f0160209004810192826200015b5760008555620001a6565b82601f106200017657805160ff1916838001178555620001a6565b82800160010185558215620001a6579182015b82811115620001a657825182559160200191906001019062000189565b50620001b4929150620001b8565b5090565b5b80821115620001b45760008155600101620001b9565b60006020808385031215620001e357600080fd5b82516001600160401b0380821115620001fb57600080fd5b818501915085601f8301126200021057600080fd5b815181811115620002255762000225620002e8565b604051601f8201601f19908116603f01168101908382118183101715620002505762000250620002e8565b8160405282815288868487010111156200026957600080fd5b600093505b828410156200028d57848401860151818501870152928501926200026e565b828411156200029f5760008684830101525b98975050505050505050565b600181811c90821680620002c057607f821691505b60208210811415620002e257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b613326806200030e6000396000f3fe6080604052600436106102e45760003560e01c806362dc6e2111610190578063a22cb465116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c5146108bc578063ed1fc2a214610905578063f2fde38b1461091a578063f759867a1461093a57600080fd5b8063c87b56dd1461084e578063d0258c251461086e578063d547cfb7146108a757600080fd5b8063a22cb465146107ab578063a2e91477146107cb578063aef6ee1f146107e5578063b65c5f8914610805578063b88d4fde1461081b578063c1d35b2a1461083b57600080fd5b80637f674f48116101495780638da5cb5b116101235780638da5cb5b1461074f57806395d89b411461076d5780639cac37ab14610782578063a0712d681461079857600080fd5b80637f674f48146106f2578063853828b61461071f5780638d859f3e1461073457600080fd5b806362dc6e211461064d5780636352211e1461066857806366e25e2f1461068857806370a08231146106a8578063715018a6146106c857806379c307f5146106dd57600080fd5b80631f734dfe1161024f5780632f814575116102085780634f6ccce7116101e25780634f6ccce7146105e2578063549527c31461060257806355f804b3146106175780635ff4d81d1461063757600080fd5b80632f8145751461058557806342842e0e1461059a57806346bb2833146105ba57600080fd5b80631f734dfe146104ba578063216d5da9146104ea57806323b872dd1461051a578063245100431461053a5780632ece34b6146105505780632f745c591461056557600080fd5b80630fb599da116102a15780630fb599da146103dc57806318160ddd14610404578063191f65ac146104195780631978f4691461045257806319e25623146104725780631b5757f21461049a57600080fd5b806301ffc9a7146102e957806304549d6f1461031e57806306fdde031461033d578063081812fc1461035f578063095ea7b31461039757806309d42b30146103b9575b600080fd5b3480156102f557600080fd5b50610309610304366004612e2a565b61094d565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50600e5461030990610100900460ff1681565b34801561034957600080fd5b50610352610978565b6040516103159190612f5e565b34801561036b57600080fd5b5061037f61037a366004612ead565b610a0a565b6040516001600160a01b039091168152602001610315565b3480156103a357600080fd5b506103b76103b2366004612d8b565b610aa4565b005b3480156103c557600080fd5b506103ce600681565b604051908152602001610315565b3480156103e857600080fd5b5061037f73eff9932b80bb0009b85144ffeb881788c1e41ffe81565b34801561041057600080fd5b506008546103ce565b34801561042557600080fd5b50610309610434366004612c49565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561045e57600080fd5b506103ce61046d366004612c49565b610bba565b34801561047e57600080fd5b5061037f73501d29b7d66b7ca7c7ef2afd1cce5e52e40663a681565b3480156104a657600080fd5b506103b76104b5366004612d8b565b610bfe565b3480156104c657600080fd5b506103096104d5366004612c49565b60106020526000908152604090205460ff1681565b3480156104f657600080fd5b50610309610505366004612c49565b600f6020526000908152604090205460ff1681565b34801561052657600080fd5b506103b7610535366004612c97565b610df8565b34801561054657600080fd5b506103ce600b5481565b34801561055c57600080fd5b506103ce600181565b34801561057157600080fd5b506103ce610580366004612d8b565b610e29565b34801561059157600080fd5b506103b7610ebf565b3480156105a657600080fd5b506103b76105b5366004612c97565b610efd565b3480156105c657600080fd5b5061037f73820270a17869f10c6f637765fdd8bd0b41e7bad681565b3480156105ee57600080fd5b506103ce6105fd366004612ead565b610f18565b34801561060e57600080fd5b506103ce600381565b34801561062357600080fd5b506103b7610632366004612e64565b610fab565b34801561064357600080fd5b506103ce6101f481565b34801561065957600080fd5b506103ce66b1a2bc2ec5000081565b34801561067457600080fd5b5061037f610683366004612ead565b611023565b34801561069457600080fd5b506103b76106a3366004612db5565b61109a565b3480156106b457600080fd5b506103ce6106c3366004612c49565b61122e565b3480156106d457600080fd5b506103b76112b5565b3480156106e957600080fd5b506103ce600c81565b3480156106fe57600080fd5b506103ce61070d366004612c49565b60116020526000908152604090205481565b34801561072b57600080fd5b506103b76112eb565b34801561074057600080fd5b506103ce66f8b0a10e47000081565b34801561075b57600080fd5b50600a546001600160a01b031661037f565b34801561077957600080fd5b506103526113d3565b34801561078e57600080fd5b506103ce61271081565b6103b76107a6366004612ead565b6113e2565b3480156107b757600080fd5b506103b76107c6366004612d4f565b6116a3565b3480156107d757600080fd5b50600e546103099060ff1681565b3480156107f157600080fd5b506103b7610800366004612db5565b6116b2565b34801561081157600080fd5b506103ce600c5481565b34801561082757600080fd5b506103b7610836366004612cd3565b611846565b6103b7610849366004612ead565b61187e565b34801561085a57600080fd5b50610352610869366004612ead565b611ae9565b34801561087a57600080fd5b50610309610889366004612c49565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156108b357600080fd5b50610352611bc4565b3480156108c857600080fd5b506103096108d7366004612c64565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b506103b7611c52565b34801561092657600080fd5b506103b7610935366004612c49565b611c99565b6103b7610948366004612ead565b611d31565b60006001600160e01b0319821663780e9d6360e01b1480610972575061097282611fca565b92915050565b60606000805461098790613202565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613202565b8015610a005780601f106109d557610100808354040283529160200191610a00565b820191906000526020600020905b8154815290600101906020018083116109e357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610aaf82611023565b9050806001600160a01b0316836001600160a01b03161415610b1d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a7f565b336001600160a01b0382161480610b395750610b3981336108d7565b610bab5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a7f565b610bb5838361201a565b505050565b60006001600160a01b038216610be25760405162461bcd60e51b8152600401610a7f906130b5565b506001600160a01b031660009081526011602052604090205490565b600a546001600160a01b03163314610c285760405162461bcd60e51b8152600401610a7f90613049565b6101f4600b541415610c8c5760405162461bcd60e51b815260206004820152602760248201527f416c7265616479206861766520636c61696d656420616c6c207265736572766560448201526664204b4954544960c81b6064820152608401610a7f565b6101f481600b54610c9d9190613174565b1115610cfb5760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560448201526664204b4954544960c81b6064820152608401610a7f565b6001600160a01b038216610d215760405162461bcd60e51b8152600401610a7f906130b5565b612710610d2d60085490565b10610d4a5760405162461bcd60e51b8152600401610a7f9061313d565b61271081610d5760085490565b610d619190613174565b1115610d7f5760405162461bcd60e51b8152600401610a7f90613012565b6000600c546001610d909190613174565b905060005b82811015610dc257610db084610dab8385613174565b612088565b80610dba8161323d565b915050610d95565b5081600c6000828254610dd59190613174565b9250508190555081600b6000828254610dee9190613174565b9091555050505050565b610e0233826120a2565b610e1e5760405162461bcd60e51b8152600401610a7f906130ec565b610bb5838383612199565b6000610e348361122e565b8210610e965760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a7f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ee95760405162461bcd60e51b8152600401610a7f90613049565b600e805460ff19811660ff90911615179055565b610bb583838360405180602001604052806000815250611846565b6000610f2360085490565b8210610f865760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a7f565b60088281548110610f9957610f996132ae565b90600052602060002001549050919050565b600a546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610a7f90613049565b8051610fe890600d906020840190612b1e565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516110189190612f5e565b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806109725760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a7f565b600a546001600160a01b031633146110c45760405162461bcd60e51b8152600401610a7f90613049565b60005b81811015610bb55760008383838181106110e3576110e36132ae565b90506020020160208101906110f89190612c49565b6001600160a01b0316141561111f5760405162461bcd60e51b8152600401610a7f906130b5565b600160106000858585818110611137576111376132ae565b905060200201602081019061114c9190612c49565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560118185858581811061118c5761118c6132ae565b90506020020160208101906111a19190612c49565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116111ce57600061121b565b601160008484848181106111e4576111e46132ae565b90506020020160208101906111f99190612c49565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806112268161323d565b9150506110c7565b60006001600160a01b0382166112995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a7f565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112df5760405162461bcd60e51b8152600401610a7f90613049565b6112e96000612344565b565b600a546001600160a01b031633146113155760405162461bcd60e51b8152600401610a7f90613049565b47806113595760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a7f565b61138d73eff9932b80bb0009b85144ffeb881788c1e41ffe606461137e8460056131a0565b611388919061318c565b612396565b6113b273501d29b7d66b7ca7c7ef2afd1cce5e52e40663a6606461137e8460056131a0565b6113d073820270a17869f10c6f637765fdd8bd0b41e7bad647612396565b50565b60606001805461098790613202565b600e5460ff166114345760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c6520686173206e6f74207374617274656400000000006044820152606401610a7f565b61271061144060085490565b1061145d5760405162461bcd60e51b8152600401610a7f9061313d565b60068111156114c85760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152701034b71030903a3930b739b0b1ba34b7b760791b6064820152608401610a7f565b612710816114d560085490565b6114df9190613174565b11156114fd5760405162461bcd60e51b8152600401610a7f90613012565b33600090815260116020526040902054600c9061151b908390613174565b111561157a5760405162461bcd60e51b815260206004820152602860248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015267206164647265737360c01b6064820152608401610a7f565b6000811161159a5760405162461bcd60e51b8152600401610a7f9061307e565b346115ac8266f8b0a10e4700006131a0565b146115f35760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a7f565b60005b8181101561166c576000600c54600161160f9190613174565b90506001600c60008282546116249190613174565b9091555050336000908152601160205260408120805460019290611649908490613174565b9091555061165990503382612088565b50806116648161323d565b9150506115f6565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b59101611018565b6116ae338383612439565b5050565b600a546001600160a01b031633146116dc5760405162461bcd60e51b8152600401610a7f90613049565b60005b81811015610bb55760008383838181106116fb576116fb6132ae565b90506020020160208101906117109190612c49565b6001600160a01b031614156117375760405162461bcd60e51b8152600401610a7f906130b5565b6001600f600085858581811061174f5761174f6132ae565b90506020020160208101906117649190612c49565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556011818585858181106117a4576117a46132ae565b90506020020160208101906117b99190612c49565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116117e6576000611833565b601160008484848181106117fc576117fc6132ae565b90506020020160208101906118119190612c49565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061183e8161323d565b9150506116df565b61185033836120a2565b61186c5760405162461bcd60e51b8152600401610a7f906130ec565b61187884848484612508565b50505050565b600e54610100900460ff166118cf5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a7f565b3360009081526010602052604090205460ff1661192e5760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f206e6f74206861766520612046524545205041535300000000006044820152606401610a7f565b61271061193a60085490565b106119575760405162461bcd60e51b8152600401610a7f9061313d565b60018111156119785760405162461bcd60e51b8152600401610a7f90612f71565b6127108161198560085490565b61198f9190613174565b11156119ad5760405162461bcd60e51b8152600401610a7f90613012565b336000908152601160205260409020546001906119cb908390613174565b1115611a195760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a7f565b60008111611a395760405162461bcd60e51b8152600401610a7f9061307e565b60005b81811015611ab2576000600c546001611a559190613174565b90506001600c6000828254611a6a9190613174565b9091555050336000908152601160205260408120805460019290611a8f908490613174565b90915550611a9f90503382612088565b5080611aaa8161323d565b915050611a3c565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a39101611018565b6000818152600260205260409020546060906001600160a01b0316611b685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a7f565b6000611b7261253b565b90506000815111611b925760405180602001604052806000815250611bbd565b80611b9c8461254a565b604051602001611bad929190612ef2565b6040516020818303038152906040525b9392505050565b600d8054611bd190613202565b80601f0160208091040260200160405190810160405280929190818152602001828054611bfd90613202565b8015611c4a5780601f10611c1f57610100808354040283529160200191611c4a565b820191906000526020600020905b815481529060010190602001808311611c2d57829003601f168201915b505050505081565b600a546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610a7f90613049565b600e805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611cc35760405162461bcd60e51b8152600401610a7f90613049565b6001600160a01b038116611d285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7f565b6113d081612344565b600e54610100900460ff16611d825760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a7f565b336000908152600f602052604090205460ff16611ded5760405162461bcd60e51b8152602060048201526024808201527f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560448201526373616c6560e01b6064820152608401610a7f565b612710611df960085490565b10611e165760405162461bcd60e51b8152600401610a7f9061313d565b6003811115611e375760405162461bcd60e51b8152600401610a7f90612f71565b61271081611e4460085490565b611e4e9190613174565b1115611e6c5760405162461bcd60e51b8152600401610a7f90613012565b33600090815260116020526040902054600390611e8a908390613174565b1115611ed85760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a7f565b60008111611ef85760405162461bcd60e51b8152600401610a7f9061307e565b34611f0a8266b1a2bc2ec500006131a0565b14611f515760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a7f565b60005b81811015611ab2576000600c546001611f6d9190613174565b90506001600c6000828254611f829190613174565b9091555050336000908152601160205260408120805460019290611fa7908490613174565b90915550611fb790503382612088565b5080611fc28161323d565b915050611f54565b60006001600160e01b031982166380ac58cd60e01b1480611ffb57506001600160e01b03198216635b5e139f60e01b145b8061097257506301ffc9a760e01b6001600160e01b0319831614610972565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204f82611023565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116ae828260405180602001604052806000815250612648565b6000818152600260205260408120546001600160a01b031661211b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a7f565b600061212683611023565b9050806001600160a01b0316846001600160a01b031614806121615750836001600160a01b031661215684610a0a565b6001600160a01b0316145b8061219157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121ac82611023565b6001600160a01b0316146122145760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a7f565b6001600160a01b0382166122765760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7f565b61228183838361267b565b61228c60008261201a565b6001600160a01b03831660009081526003602052604081208054600192906122b59084906131bf565b90915550506001600160a01b03821660009081526003602052604081208054600192906122e3908490613174565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123e3576040519150601f19603f3d011682016040523d82523d6000602084013e6123e8565b606091505b5050905080610bb55760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a7f565b816001600160a01b0316836001600160a01b0316141561249b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a7f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612513848484612199565b61251f84848484612733565b6118785760405162461bcd60e51b8152600401610a7f90612fc0565b6060600d805461098790613202565b60608161256e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561259857806125828161323d565b91506125919050600a8361318c565b9150612572565b60008167ffffffffffffffff8111156125b3576125b36132c4565b6040519080825280601f01601f1916602001820160405280156125dd576020820181803683370190505b5090505b8415612191576125f26001836131bf565b91506125ff600a86613258565b61260a906030613174565b60f81b81838151811061261f5761261f6132ae565b60200101906001600160f81b031916908160001a905350612641600a8661318c565b94506125e1565b6126528383612840565b61265f6000848484612733565b610bb55760405162461bcd60e51b8152600401610a7f90612fc0565b6001600160a01b0383166126d6576126d181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6126f9565b816001600160a01b0316836001600160a01b0316146126f9576126f9838261298e565b6001600160a01b03821661271057610bb581612a2b565b826001600160a01b0316826001600160a01b031614610bb557610bb58282612ada565b60006001600160a01b0384163b1561283557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612777903390899088908890600401612f21565b602060405180830381600087803b15801561279157600080fd5b505af19250505080156127c1575060408051601f3d908101601f191682019092526127be91810190612e47565b60015b61281b573d8080156127ef576040519150601f19603f3d011682016040523d82523d6000602084013e6127f4565b606091505b5080516128135760405162461bcd60e51b8152600401610a7f90612fc0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612191565b506001949350505050565b6001600160a01b0382166128965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a7f565b6000818152600260205260409020546001600160a01b0316156128fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a7f565b6129076000838361267b565b6001600160a01b0382166000908152600360205260408120805460019290612930908490613174565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161299b8461122e565b6129a591906131bf565b6000838152600760205260409020549091508082146129f8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a3d906001906131bf565b60008381526009602052604081205460088054939450909284908110612a6557612a656132ae565b906000526020600020015490508060088381548110612a8657612a866132ae565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612abe57612abe613298565b6001900381819060005260206000200160009055905550505050565b6000612ae58361122e565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b2a90613202565b90600052602060002090601f016020900481019282612b4c5760008555612b92565b82601f10612b6557805160ff1916838001178555612b92565b82800160010185558215612b92579182015b82811115612b92578251825591602001919060010190612b77565b50612b9e929150612ba2565b5090565b5b80821115612b9e5760008155600101612ba3565b600067ffffffffffffffff80841115612bd257612bd26132c4565b604051601f8501601f19908116603f01168101908282118183101715612bfa57612bfa6132c4565b81604052809350858152868686011115612c1357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c4457600080fd5b919050565b600060208284031215612c5b57600080fd5b611bbd82612c2d565b60008060408385031215612c7757600080fd5b612c8083612c2d565b9150612c8e60208401612c2d565b90509250929050565b600080600060608486031215612cac57600080fd5b612cb584612c2d565b9250612cc360208501612c2d565b9150604084013590509250925092565b60008060008060808587031215612ce957600080fd5b612cf285612c2d565b9350612d0060208601612c2d565b925060408501359150606085013567ffffffffffffffff811115612d2357600080fd5b8501601f81018713612d3457600080fd5b612d4387823560208401612bb7565b91505092959194509250565b60008060408385031215612d6257600080fd5b612d6b83612c2d565b915060208301358015158114612d8057600080fd5b809150509250929050565b60008060408385031215612d9e57600080fd5b612da783612c2d565b946020939093013593505050565b60008060208385031215612dc857600080fd5b823567ffffffffffffffff80821115612de057600080fd5b818501915085601f830112612df457600080fd5b813581811115612e0357600080fd5b8660208260051b8501011115612e1857600080fd5b60209290920196919550909350505050565b600060208284031215612e3c57600080fd5b8135611bbd816132da565b600060208284031215612e5957600080fd5b8151611bbd816132da565b600060208284031215612e7657600080fd5b813567ffffffffffffffff811115612e8d57600080fd5b8201601f81018413612e9e57600080fd5b61219184823560208401612bb7565b600060208284031215612ebf57600080fd5b5035919050565b60008151808452612ede8160208601602086016131d6565b601f01601f19169290920160200192915050565b60008351612f048184602088016131d6565b835190830190612f188183602088016131d6565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f5490830184612ec6565b9695505050505050565b602081526000611bbd6020830184612ec6565b6020808252602f908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360408201526e20647572696e672070726573616c6560881b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4d757374206d696e74206174206c65617374206f6e65204b4954544900000000604082015260600190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b600082198211156131875761318761326c565b500190565b60008261319b5761319b613282565b500490565b60008160001904831182151516156131ba576131ba61326c565b500290565b6000828210156131d1576131d161326c565b500390565b60005b838110156131f15781810151838201526020016131d9565b838111156118785750506000910152565b600181811c9082168061321657607f821691505b6020821081141561323757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156132515761325161326c565b5060010190565b60008261326757613267613282565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113d057600080fdfea264697066735822122077c954fa6f394740dfd0f47e27afddb1ae86e5668827d43e40bc5013dbf065a664736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a375762586a5573617a725054355134645066356d6531653272785761504e6e51376579426f5861616f55482f00000000000000000000

Deployed Bytecode

0x6080604052600436106102e45760003560e01c806362dc6e2111610190578063a22cb465116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c5146108bc578063ed1fc2a214610905578063f2fde38b1461091a578063f759867a1461093a57600080fd5b8063c87b56dd1461084e578063d0258c251461086e578063d547cfb7146108a757600080fd5b8063a22cb465146107ab578063a2e91477146107cb578063aef6ee1f146107e5578063b65c5f8914610805578063b88d4fde1461081b578063c1d35b2a1461083b57600080fd5b80637f674f48116101495780638da5cb5b116101235780638da5cb5b1461074f57806395d89b411461076d5780639cac37ab14610782578063a0712d681461079857600080fd5b80637f674f48146106f2578063853828b61461071f5780638d859f3e1461073457600080fd5b806362dc6e211461064d5780636352211e1461066857806366e25e2f1461068857806370a08231146106a8578063715018a6146106c857806379c307f5146106dd57600080fd5b80631f734dfe1161024f5780632f814575116102085780634f6ccce7116101e25780634f6ccce7146105e2578063549527c31461060257806355f804b3146106175780635ff4d81d1461063757600080fd5b80632f8145751461058557806342842e0e1461059a57806346bb2833146105ba57600080fd5b80631f734dfe146104ba578063216d5da9146104ea57806323b872dd1461051a578063245100431461053a5780632ece34b6146105505780632f745c591461056557600080fd5b80630fb599da116102a15780630fb599da146103dc57806318160ddd14610404578063191f65ac146104195780631978f4691461045257806319e25623146104725780631b5757f21461049a57600080fd5b806301ffc9a7146102e957806304549d6f1461031e57806306fdde031461033d578063081812fc1461035f578063095ea7b31461039757806309d42b30146103b9575b600080fd5b3480156102f557600080fd5b50610309610304366004612e2a565b61094d565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50600e5461030990610100900460ff1681565b34801561034957600080fd5b50610352610978565b6040516103159190612f5e565b34801561036b57600080fd5b5061037f61037a366004612ead565b610a0a565b6040516001600160a01b039091168152602001610315565b3480156103a357600080fd5b506103b76103b2366004612d8b565b610aa4565b005b3480156103c557600080fd5b506103ce600681565b604051908152602001610315565b3480156103e857600080fd5b5061037f73eff9932b80bb0009b85144ffeb881788c1e41ffe81565b34801561041057600080fd5b506008546103ce565b34801561042557600080fd5b50610309610434366004612c49565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561045e57600080fd5b506103ce61046d366004612c49565b610bba565b34801561047e57600080fd5b5061037f73501d29b7d66b7ca7c7ef2afd1cce5e52e40663a681565b3480156104a657600080fd5b506103b76104b5366004612d8b565b610bfe565b3480156104c657600080fd5b506103096104d5366004612c49565b60106020526000908152604090205460ff1681565b3480156104f657600080fd5b50610309610505366004612c49565b600f6020526000908152604090205460ff1681565b34801561052657600080fd5b506103b7610535366004612c97565b610df8565b34801561054657600080fd5b506103ce600b5481565b34801561055c57600080fd5b506103ce600181565b34801561057157600080fd5b506103ce610580366004612d8b565b610e29565b34801561059157600080fd5b506103b7610ebf565b3480156105a657600080fd5b506103b76105b5366004612c97565b610efd565b3480156105c657600080fd5b5061037f73820270a17869f10c6f637765fdd8bd0b41e7bad681565b3480156105ee57600080fd5b506103ce6105fd366004612ead565b610f18565b34801561060e57600080fd5b506103ce600381565b34801561062357600080fd5b506103b7610632366004612e64565b610fab565b34801561064357600080fd5b506103ce6101f481565b34801561065957600080fd5b506103ce66b1a2bc2ec5000081565b34801561067457600080fd5b5061037f610683366004612ead565b611023565b34801561069457600080fd5b506103b76106a3366004612db5565b61109a565b3480156106b457600080fd5b506103ce6106c3366004612c49565b61122e565b3480156106d457600080fd5b506103b76112b5565b3480156106e957600080fd5b506103ce600c81565b3480156106fe57600080fd5b506103ce61070d366004612c49565b60116020526000908152604090205481565b34801561072b57600080fd5b506103b76112eb565b34801561074057600080fd5b506103ce66f8b0a10e47000081565b34801561075b57600080fd5b50600a546001600160a01b031661037f565b34801561077957600080fd5b506103526113d3565b34801561078e57600080fd5b506103ce61271081565b6103b76107a6366004612ead565b6113e2565b3480156107b757600080fd5b506103b76107c6366004612d4f565b6116a3565b3480156107d757600080fd5b50600e546103099060ff1681565b3480156107f157600080fd5b506103b7610800366004612db5565b6116b2565b34801561081157600080fd5b506103ce600c5481565b34801561082757600080fd5b506103b7610836366004612cd3565b611846565b6103b7610849366004612ead565b61187e565b34801561085a57600080fd5b50610352610869366004612ead565b611ae9565b34801561087a57600080fd5b50610309610889366004612c49565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156108b357600080fd5b50610352611bc4565b3480156108c857600080fd5b506103096108d7366004612c64565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561091157600080fd5b506103b7611c52565b34801561092657600080fd5b506103b7610935366004612c49565b611c99565b6103b7610948366004612ead565b611d31565b60006001600160e01b0319821663780e9d6360e01b1480610972575061097282611fca565b92915050565b60606000805461098790613202565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613202565b8015610a005780601f106109d557610100808354040283529160200191610a00565b820191906000526020600020905b8154815290600101906020018083116109e357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610aaf82611023565b9050806001600160a01b0316836001600160a01b03161415610b1d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a7f565b336001600160a01b0382161480610b395750610b3981336108d7565b610bab5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a7f565b610bb5838361201a565b505050565b60006001600160a01b038216610be25760405162461bcd60e51b8152600401610a7f906130b5565b506001600160a01b031660009081526011602052604090205490565b600a546001600160a01b03163314610c285760405162461bcd60e51b8152600401610a7f90613049565b6101f4600b541415610c8c5760405162461bcd60e51b815260206004820152602760248201527f416c7265616479206861766520636c61696d656420616c6c207265736572766560448201526664204b4954544960c81b6064820152608401610a7f565b6101f481600b54610c9d9190613174565b1115610cfb5760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560448201526664204b4954544960c81b6064820152608401610a7f565b6001600160a01b038216610d215760405162461bcd60e51b8152600401610a7f906130b5565b612710610d2d60085490565b10610d4a5760405162461bcd60e51b8152600401610a7f9061313d565b61271081610d5760085490565b610d619190613174565b1115610d7f5760405162461bcd60e51b8152600401610a7f90613012565b6000600c546001610d909190613174565b905060005b82811015610dc257610db084610dab8385613174565b612088565b80610dba8161323d565b915050610d95565b5081600c6000828254610dd59190613174565b9250508190555081600b6000828254610dee9190613174565b9091555050505050565b610e0233826120a2565b610e1e5760405162461bcd60e51b8152600401610a7f906130ec565b610bb5838383612199565b6000610e348361122e565b8210610e965760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a7f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ee95760405162461bcd60e51b8152600401610a7f90613049565b600e805460ff19811660ff90911615179055565b610bb583838360405180602001604052806000815250611846565b6000610f2360085490565b8210610f865760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a7f565b60088281548110610f9957610f996132ae565b90600052602060002001549050919050565b600a546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610a7f90613049565b8051610fe890600d906020840190612b1e565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516110189190612f5e565b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806109725760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a7f565b600a546001600160a01b031633146110c45760405162461bcd60e51b8152600401610a7f90613049565b60005b81811015610bb55760008383838181106110e3576110e36132ae565b90506020020160208101906110f89190612c49565b6001600160a01b0316141561111f5760405162461bcd60e51b8152600401610a7f906130b5565b600160106000858585818110611137576111376132ae565b905060200201602081019061114c9190612c49565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560118185858581811061118c5761118c6132ae565b90506020020160208101906111a19190612c49565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116111ce57600061121b565b601160008484848181106111e4576111e46132ae565b90506020020160208101906111f99190612c49565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806112268161323d565b9150506110c7565b60006001600160a01b0382166112995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a7f565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112df5760405162461bcd60e51b8152600401610a7f90613049565b6112e96000612344565b565b600a546001600160a01b031633146113155760405162461bcd60e51b8152600401610a7f90613049565b47806113595760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a7f565b61138d73eff9932b80bb0009b85144ffeb881788c1e41ffe606461137e8460056131a0565b611388919061318c565b612396565b6113b273501d29b7d66b7ca7c7ef2afd1cce5e52e40663a6606461137e8460056131a0565b6113d073820270a17869f10c6f637765fdd8bd0b41e7bad647612396565b50565b60606001805461098790613202565b600e5460ff166114345760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c6520686173206e6f74207374617274656400000000006044820152606401610a7f565b61271061144060085490565b1061145d5760405162461bcd60e51b8152600401610a7f9061313d565b60068111156114c85760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152701034b71030903a3930b739b0b1ba34b7b760791b6064820152608401610a7f565b612710816114d560085490565b6114df9190613174565b11156114fd5760405162461bcd60e51b8152600401610a7f90613012565b33600090815260116020526040902054600c9061151b908390613174565b111561157a5760405162461bcd60e51b815260206004820152602860248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015267206164647265737360c01b6064820152608401610a7f565b6000811161159a5760405162461bcd60e51b8152600401610a7f9061307e565b346115ac8266f8b0a10e4700006131a0565b146115f35760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a7f565b60005b8181101561166c576000600c54600161160f9190613174565b90506001600c60008282546116249190613174565b9091555050336000908152601160205260408120805460019290611649908490613174565b9091555061165990503382612088565b50806116648161323d565b9150506115f6565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b59101611018565b6116ae338383612439565b5050565b600a546001600160a01b031633146116dc5760405162461bcd60e51b8152600401610a7f90613049565b60005b81811015610bb55760008383838181106116fb576116fb6132ae565b90506020020160208101906117109190612c49565b6001600160a01b031614156117375760405162461bcd60e51b8152600401610a7f906130b5565b6001600f600085858581811061174f5761174f6132ae565b90506020020160208101906117649190612c49565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556011818585858181106117a4576117a46132ae565b90506020020160208101906117b99190612c49565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116117e6576000611833565b601160008484848181106117fc576117fc6132ae565b90506020020160208101906118119190612c49565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061183e8161323d565b9150506116df565b61185033836120a2565b61186c5760405162461bcd60e51b8152600401610a7f906130ec565b61187884848484612508565b50505050565b600e54610100900460ff166118cf5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a7f565b3360009081526010602052604090205460ff1661192e5760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f206e6f74206861766520612046524545205041535300000000006044820152606401610a7f565b61271061193a60085490565b106119575760405162461bcd60e51b8152600401610a7f9061313d565b60018111156119785760405162461bcd60e51b8152600401610a7f90612f71565b6127108161198560085490565b61198f9190613174565b11156119ad5760405162461bcd60e51b8152600401610a7f90613012565b336000908152601160205260409020546001906119cb908390613174565b1115611a195760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a7f565b60008111611a395760405162461bcd60e51b8152600401610a7f9061307e565b60005b81811015611ab2576000600c546001611a559190613174565b90506001600c6000828254611a6a9190613174565b9091555050336000908152601160205260408120805460019290611a8f908490613174565b90915550611a9f90503382612088565b5080611aaa8161323d565b915050611a3c565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a39101611018565b6000818152600260205260409020546060906001600160a01b0316611b685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a7f565b6000611b7261253b565b90506000815111611b925760405180602001604052806000815250611bbd565b80611b9c8461254a565b604051602001611bad929190612ef2565b6040516020818303038152906040525b9392505050565b600d8054611bd190613202565b80601f0160208091040260200160405190810160405280929190818152602001828054611bfd90613202565b8015611c4a5780601f10611c1f57610100808354040283529160200191611c4a565b820191906000526020600020905b815481529060010190602001808311611c2d57829003601f168201915b505050505081565b600a546001600160a01b03163314611c7c5760405162461bcd60e51b8152600401610a7f90613049565b600e805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611cc35760405162461bcd60e51b8152600401610a7f90613049565b6001600160a01b038116611d285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7f565b6113d081612344565b600e54610100900460ff16611d825760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a7f565b336000908152600f602052604090205460ff16611ded5760405162461bcd60e51b8152602060048201526024808201527f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560448201526373616c6560e01b6064820152608401610a7f565b612710611df960085490565b10611e165760405162461bcd60e51b8152600401610a7f9061313d565b6003811115611e375760405162461bcd60e51b8152600401610a7f90612f71565b61271081611e4460085490565b611e4e9190613174565b1115611e6c5760405162461bcd60e51b8152600401610a7f90613012565b33600090815260116020526040902054600390611e8a908390613174565b1115611ed85760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a7f565b60008111611ef85760405162461bcd60e51b8152600401610a7f9061307e565b34611f0a8266b1a2bc2ec500006131a0565b14611f515760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a7f565b60005b81811015611ab2576000600c546001611f6d9190613174565b90506001600c6000828254611f829190613174565b9091555050336000908152601160205260408120805460019290611fa7908490613174565b90915550611fb790503382612088565b5080611fc28161323d565b915050611f54565b60006001600160e01b031982166380ac58cd60e01b1480611ffb57506001600160e01b03198216635b5e139f60e01b145b8061097257506301ffc9a760e01b6001600160e01b0319831614610972565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204f82611023565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6116ae828260405180602001604052806000815250612648565b6000818152600260205260408120546001600160a01b031661211b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a7f565b600061212683611023565b9050806001600160a01b0316846001600160a01b031614806121615750836001600160a01b031661215684610a0a565b6001600160a01b0316145b8061219157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121ac82611023565b6001600160a01b0316146122145760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a7f565b6001600160a01b0382166122765760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7f565b61228183838361267b565b61228c60008261201a565b6001600160a01b03831660009081526003602052604081208054600192906122b59084906131bf565b90915550506001600160a01b03821660009081526003602052604081208054600192906122e3908490613174565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123e3576040519150601f19603f3d011682016040523d82523d6000602084013e6123e8565b606091505b5050905080610bb55760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a7f565b816001600160a01b0316836001600160a01b0316141561249b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a7f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612513848484612199565b61251f84848484612733565b6118785760405162461bcd60e51b8152600401610a7f90612fc0565b6060600d805461098790613202565b60608161256e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561259857806125828161323d565b91506125919050600a8361318c565b9150612572565b60008167ffffffffffffffff8111156125b3576125b36132c4565b6040519080825280601f01601f1916602001820160405280156125dd576020820181803683370190505b5090505b8415612191576125f26001836131bf565b91506125ff600a86613258565b61260a906030613174565b60f81b81838151811061261f5761261f6132ae565b60200101906001600160f81b031916908160001a905350612641600a8661318c565b94506125e1565b6126528383612840565b61265f6000848484612733565b610bb55760405162461bcd60e51b8152600401610a7f90612fc0565b6001600160a01b0383166126d6576126d181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6126f9565b816001600160a01b0316836001600160a01b0316146126f9576126f9838261298e565b6001600160a01b03821661271057610bb581612a2b565b826001600160a01b0316826001600160a01b031614610bb557610bb58282612ada565b60006001600160a01b0384163b1561283557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612777903390899088908890600401612f21565b602060405180830381600087803b15801561279157600080fd5b505af19250505080156127c1575060408051601f3d908101601f191682019092526127be91810190612e47565b60015b61281b573d8080156127ef576040519150601f19603f3d011682016040523d82523d6000602084013e6127f4565b606091505b5080516128135760405162461bcd60e51b8152600401610a7f90612fc0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612191565b506001949350505050565b6001600160a01b0382166128965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a7f565b6000818152600260205260409020546001600160a01b0316156128fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a7f565b6129076000838361267b565b6001600160a01b0382166000908152600360205260408120805460019290612930908490613174565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161299b8461122e565b6129a591906131bf565b6000838152600760205260409020549091508082146129f8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a3d906001906131bf565b60008381526009602052604081205460088054939450909284908110612a6557612a656132ae565b906000526020600020015490508060088381548110612a8657612a866132ae565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612abe57612abe613298565b6001900381819060005260206000200160009055905550505050565b6000612ae58361122e565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b2a90613202565b90600052602060002090601f016020900481019282612b4c5760008555612b92565b82601f10612b6557805160ff1916838001178555612b92565b82800160010185558215612b92579182015b82811115612b92578251825591602001919060010190612b77565b50612b9e929150612ba2565b5090565b5b80821115612b9e5760008155600101612ba3565b600067ffffffffffffffff80841115612bd257612bd26132c4565b604051601f8501601f19908116603f01168101908282118183101715612bfa57612bfa6132c4565b81604052809350858152868686011115612c1357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c4457600080fd5b919050565b600060208284031215612c5b57600080fd5b611bbd82612c2d565b60008060408385031215612c7757600080fd5b612c8083612c2d565b9150612c8e60208401612c2d565b90509250929050565b600080600060608486031215612cac57600080fd5b612cb584612c2d565b9250612cc360208501612c2d565b9150604084013590509250925092565b60008060008060808587031215612ce957600080fd5b612cf285612c2d565b9350612d0060208601612c2d565b925060408501359150606085013567ffffffffffffffff811115612d2357600080fd5b8501601f81018713612d3457600080fd5b612d4387823560208401612bb7565b91505092959194509250565b60008060408385031215612d6257600080fd5b612d6b83612c2d565b915060208301358015158114612d8057600080fd5b809150509250929050565b60008060408385031215612d9e57600080fd5b612da783612c2d565b946020939093013593505050565b60008060208385031215612dc857600080fd5b823567ffffffffffffffff80821115612de057600080fd5b818501915085601f830112612df457600080fd5b813581811115612e0357600080fd5b8660208260051b8501011115612e1857600080fd5b60209290920196919550909350505050565b600060208284031215612e3c57600080fd5b8135611bbd816132da565b600060208284031215612e5957600080fd5b8151611bbd816132da565b600060208284031215612e7657600080fd5b813567ffffffffffffffff811115612e8d57600080fd5b8201601f81018413612e9e57600080fd5b61219184823560208401612bb7565b600060208284031215612ebf57600080fd5b5035919050565b60008151808452612ede8160208601602086016131d6565b601f01601f19169290920160200192915050565b60008351612f048184602088016131d6565b835190830190612f188183602088016131d6565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f5490830184612ec6565b9695505050505050565b602081526000611bbd6020830184612ec6565b6020808252602f908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360408201526e20647572696e672070726573616c6560881b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4d757374206d696e74206174206c65617374206f6e65204b4954544900000000604082015260600190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b600082198211156131875761318761326c565b500190565b60008261319b5761319b613282565b500490565b60008160001904831182151516156131ba576131ba61326c565b500290565b6000828210156131d1576131d161326c565b500390565b60005b838110156131f15781810151838201526020016131d9565b838111156118785750506000910152565b600181811c9082168061321657607f821691505b6020821081141561323757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156132515761325161326c565b5060010190565b60008261326757613267613282565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113d057600080fdfea264697066735822122077c954fa6f394740dfd0f47e27afddb1ae86e5668827d43e40bc5013dbf065a664736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a375762586a5573617a725054355134645066356d6531653272785761504e6e51376579426f5861616f55482f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmZ7WbXjUsazrPT5Q4dPf5me1e2rxWaPNnQ7eyBoXaaoUH/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a375762586a5573617a725054355134645066356d6531
Arg [3] : 653272785761504e6e51376579426f5861616f55482f00000000000000000000


Deployed Bytecode Sourcemap

20366:7566:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17496:224;;;;;;;;;;-1:-1:-1;17496:224:0;;;;;:::i;:::-;;:::i;:::-;;;6755:14:1;;6748:22;6730:41;;6718:2;6703:18;17496:224:0;;;;;;;;21279:26;;;;;;;;;;-1:-1:-1;21279:26:0;;;;;;;;;;;10722:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11805:221::-;;;;;;;;;;-1:-1:-1;11805:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5774:32:1;;;5756:51;;5744:2;5729:18;11805:221:0;5610:203:1;11386:411:0;;;;;;;;;;-1:-1:-1;11386:411:0;;;;;:::i;:::-;;:::i;:::-;;20713:40;;;;;;;;;;;;20752:1;20713:40;;;;;20723:25:1;;;20711:2;20696:18;20713:40:0;20577:177:1;20951:82:0;;;;;;;;;;;;20991:42;20951:82;;17992:113;;;;;;;;;;-1:-1:-1;18080:10:0;:17;17992:113;;23156:123;;;;;;;;;;-1:-1:-1;23156:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23249:22:0;23225:4;23249:22;;;:16;:22;;;;;;;;;23156:123;23791:186;;;;;;;;;;-1:-1:-1;23791:186:0;;;;;:::i;:::-;;:::i;21040:82::-;;;;;;;;;;;;21080:42;21040:82;;22018:761;;;;;;;;;;-1:-1:-1;22018:761:0;;;;;:::i;:::-;;:::i;21369:49::-;;;;;;;;;;-1:-1:-1;21369:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21314:48;;;;;;;;;;-1:-1:-1;21314:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12369:296;;;;;;;;;;-1:-1:-1;12369:296:0;;;;;:::i;:::-;;:::i;21131:30::-;;;;;;;;;;;;;;;;20610:45;;;;;;;;;;;;20654:1;20610:45;;17728:256;;;;;;;;;;-1:-1:-1;17728:256:0;;;;;:::i;:::-;;:::i;27011:111::-;;;;;;;;;;;;;:::i;12678:185::-;;;;;;;;;;-1:-1:-1;12678:185:0;;;;;:::i;:::-;;:::i;20861:83::-;;;;;;;;;;;;20902:42;20861:83;;18113:233;;;;;;;;;;-1:-1:-1;18113:233:0;;;;;:::i;:::-;;:::i;20662:44::-;;;;;;;;;;;;20705:1;20662:44;;27251:140;;;;;;;;;;-1:-1:-1;27251:140:0;;;;;:::i;:::-;;:::i;20810:44::-;;;;;;;;;;;;20851:3;20810:44;;20504:50;;;;;;;;;;;;20544:10;20504:50;;10475:239;;;;;;;;;;-1:-1:-1;10475:239:0;;;;;:::i;:::-;;:::i;23287:363::-;;;;;;;;;;-1:-1:-1;23287:363:0;;;;;:::i;:::-;;:::i;10259:208::-;;;;;;;;;;-1:-1:-1;10259:208:0;;;;;:::i;:::-;;:::i;2979:103::-;;;;;;;;;;;;;:::i;20760:43::-;;;;;;;;;;;;20801:2;20760:43;;21425:48;;;;;;;;;;-1:-1:-1;21425:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;27399:330;;;;;;;;;;;;;:::i;20561:42::-;;;;;;;;;;;;20593:10;20561:42;;2756:87;;;;;;;;;;-1:-1:-1;2829:6:0;;-1:-1:-1;;;;;2829:6:0;2756:87;;10830:104;;;;;;;;;;;;;:::i;20456:41::-;;;;;;;;;;;;20492:5;20456:41;;25957:936;;;;;;:::i;:::-;;:::i;12034:155::-;;;;;;;;;;-1:-1:-1;12034:155:0;;;;;:::i;:::-;;:::i;21243:29::-;;;;;;;;;;-1:-1:-1;21243:29:0;;;;;;;;22787:361;;;;;;;;;;-1:-1:-1;22787:361:0;;;;;:::i;:::-;;:::i;21170:29::-;;;;;;;;;;;;;;;;12877:328;;;;;;;;;;-1:-1:-1;12877:328:0;;;;;:::i;:::-;;:::i;25018:931::-;;;;;;:::i;:::-;;:::i;10942:334::-;;;;;;;;;;-1:-1:-1;10942:334:0;;;;;:::i;:::-;;:::i;23658:125::-;;;;;;;;;;-1:-1:-1;23658:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23752:23:0;23728:4;23752:23;;;:17;:23;;;;;;;;;23658:125;21208:26;;;;;;;;;;;;;:::i;12197:164::-;;;;;;;;;;-1:-1:-1;12197:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12318:25:0;;;12294:4;12318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12197:164;26901:102;;;;;;;;;;;;;:::i;3090:201::-;;;;;;;;;;-1:-1:-1;3090:201:0;;;;;:::i;:::-;;:::i;23985:1025::-;;;;;;:::i;:::-;;:::i;17496:224::-;17598:4;-1:-1:-1;;;;;;17622:50:0;;-1:-1:-1;;;17622:50:0;;:90;;;17676:36;17700:11;17676:23;:36::i;:::-;17615:97;17496:224;-1:-1:-1;;17496:224:0:o;10722:100::-;10776:13;10809:5;10802:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10722:100;:::o;11805:221::-;11881:7;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;11901:73;;;;-1:-1:-1;;;11901:73:0;;14649:2:1;11901:73:0;;;14631:21:1;14688:2;14668:18;;;14661:30;14727:34;14707:18;;;14700:62;-1:-1:-1;;;14778:18:1;;;14771:42;14830:19;;11901:73:0;;;;;;;;;-1:-1:-1;11994:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11994:24:0;;11805:221::o;11386:411::-;11467:13;11483:23;11498:7;11483:14;:23::i;:::-;11467:39;;11531:5;-1:-1:-1;;;;;11525:11:0;:2;-1:-1:-1;;;;;11525:11:0;;;11517:57;;;;-1:-1:-1;;;11517:57:0;;18125:2:1;11517:57:0;;;18107:21:1;18164:2;18144:18;;;18137:30;18203:34;18183:18;;;18176:62;-1:-1:-1;;;18254:18:1;;;18247:31;18295:19;;11517:57:0;17923:397:1;11517:57:0;1621:10;-1:-1:-1;;;;;11609:21:0;;;;:62;;-1:-1:-1;11634:37:0;11651:5;1621:10;12197:164;:::i;11634:37::-;11587:168;;;;-1:-1:-1;;;11587:168:0;;11504:2:1;11587:168:0;;;11486:21:1;11543:2;11523:18;;;11516:30;11582:34;11562:18;;;11555:62;11653:26;11633:18;;;11626:54;11697:19;;11587:168:0;11302:420:1;11587:168:0;11768:21;11777:2;11781:7;11768:8;:21::i;:::-;11456:341;11386:411;;:::o;23791:186::-;23854:7;-1:-1:-1;;;;;23882:19:0;;23874:55;;;;-1:-1:-1;;;23874:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23949:20:0;;;;;:13;:20;;;;;;;23791:186::o;22018:761::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;20851:3:::1;22114:15;;:33;;22106:85;;;::::0;-1:-1:-1;;;22106:85:0;;16597:2:1;22106:85:0::1;::::0;::::1;16579:21:1::0;16636:2;16616:18;;;16609:30;16675:34;16655:18;;;16648:62;-1:-1:-1;;;16726:18:1;;;16719:37;16773:19;;22106:85:0::1;16395:403:1::0;22106:85:0::1;20851:3;22228:6;22210:15;;:24;;;;:::i;:::-;:42;;22202:94;;;::::0;-1:-1:-1;;;22202:94:0;;13528:2:1;22202:94:0::1;::::0;::::1;13510:21:1::0;13567:2;13547:18;;;13540:30;13606:34;13586:18;;;13579:62;-1:-1:-1;;;13657:18:1;;;13650:37;13704:19;;22202:94:0::1;13326:403:1::0;22202:94:0::1;-1:-1:-1::0;;;;;22315:23:0;::::1;22307:59;;;;-1:-1:-1::0;;;22307:59:0::1;;;;;;;:::i;:::-;20492:5;22385:13;18080:10:::0;:17;;17992:113;22385:13:::1;:25;22377:65;;;;-1:-1:-1::0;;;22377:65:0::1;;;;;;;:::i;:::-;20492:5;22477:6;22461:13;18080:10:::0;:17;;17992:113;22461:13:::1;:22;;;;:::i;:::-;:35;;22453:79;;;;-1:-1:-1::0;;;22453:79:0::1;;;;;;;:::i;:::-;22545:20;22568:14;;22585:1;22568:18;;;;:::i;:::-;22545:41;;22604:9;22599:102;22623:6;22619:1;:10;22599:102;;;22651:38;22661:9:::0;22672:16:::1;22687:1:::0;22672:12;:16:::1;:::i;:::-;22651:9;:38::i;:::-;22631:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22599:102;;;;22729:6;22711:14;;:24;;;;;;;:::i;:::-;;;;;;;;22765:6;22746:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;22018:761:0:o;12369:296::-;12521:41;1621:10;12554:7;12521:18;:41::i;:::-;12513:103;;;;-1:-1:-1;;;12513:103:0;;;;;;;:::i;:::-;12629:28;12639:4;12645:2;12649:7;12629:9;:28::i;17728:256::-;17825:7;17861:23;17878:5;17861:16;:23::i;:::-;17853:5;:31;17845:87;;;;-1:-1:-1;;;17845:87:0;;7976:2:1;17845:87:0;;;7958:21:1;8015:2;7995:18;;;7988:30;8054:34;8034:18;;;8027:62;-1:-1:-1;;;8105:18:1;;;8098:41;8156:19;;17845:87:0;7774:407:1;17845:87:0;-1:-1:-1;;;;;;17950:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;17728:256::o;27011:111::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27097:17:::1;::::0;;-1:-1:-1;;27076:38:0;::::1;27097:17;::::0;;::::1;27096:18;27076:38;::::0;;27011:111::o;12678:185::-;12816:39;12833:4;12839:2;12843:7;12816:39;;;;;;;;;;;;:16;:39::i;18113:233::-;18188:7;18224:30;18080:10;:17;;17992:113;18224:30;18216:5;:38;18208:95;;;;-1:-1:-1;;;18208:95:0;;19653:2:1;18208:95:0;;;19635:21:1;19692:2;19672:18;;;19665:30;19731:34;19711:18;;;19704:62;-1:-1:-1;;;19782:18:1;;;19775:42;19834:19;;18208:95:0;19451:408:1;18208:95:0;18321:10;18332:5;18321:17;;;;;;;;:::i;:::-;;;;;;;;;18314:24;;18113:233;;;:::o;27251:140::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27322:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;27360:23;27375:7;27360:23;;;;;;:::i;:::-;;;;;;;;27251:140:::0;:::o;10475:239::-;10547:7;10583:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10583:16:0;10618:19;10610:73;;;;-1:-1:-1;;;10610:73:0;;12340:2:1;10610:73:0;;;12322:21:1;12379:2;12359:18;;;12352:30;12418:34;12398:18;;;12391:62;-1:-1:-1;;;12469:18:1;;;12462:39;12518:19;;10610:73:0;12138:405:1;23287:363:0;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;23375:9:::1;23370:273;23390:20:::0;;::::1;23370:273;;;23464:1;23440:9:::0;;23450:1;23440:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23440:26:0::1;;;23432:62;;;;-1:-1:-1::0;;;23432:62:0::1;;;;;;;:::i;:::-;23545:4;23511:17;:31;23529:9;;23539:1;23529:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23511:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23511:31:0;;;:38;;-1:-1:-1;;23511:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;23566:13:::1;-1:-1:-1::0;23580:9:0;;23590:1;23580:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23566:27:0::1;-1:-1:-1::0;;;;;23566:27:0::1;;;;;;;;;;;;;:31;:65;;23630:1;23566:65;;;23600:13;:27;23614:9;;23624:1;23614:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23600:27:0::1;-1:-1:-1::0;;;;;23600:27:0::1;;;;;;;;;;;;;23566:65;-1:-1:-1::0;23412:3:0;::::1;::::0;::::1;:::i;:::-;;;;23370:273;;10259:208:::0;10331:7;-1:-1:-1;;;;;10359:19:0;;10351:74;;;;-1:-1:-1;;;10351:74:0;;11929:2:1;10351:74:0;;;11911:21:1;11968:2;11948:18;;;11941:30;12007:34;11987:18;;;11980:62;-1:-1:-1;;;12058:18:1;;;12051:40;12108:19;;10351:74:0;11727:406:1;10351:74:0;-1:-1:-1;;;;;;10443:16:0;;;;;:9;:16;;;;;;;10259:208::o;2979:103::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;3044:30:::1;3071:1;3044:18;:30::i;:::-;2979:103::o:0;27399:330::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27468:21:::1;27508:11:::0;27500:43:::1;;;::::0;-1:-1:-1;;;27500:43:0;;15062:2:1;27500:43:0::1;::::0;::::1;15044:21:1::0;15101:2;15081:18;;;15074:30;-1:-1:-1;;;15120:18:1;;;15113:49;15179:18;;27500:43:0::1;14860:343:1::0;27500:43:0::1;27554:48;20991:42;27597:3;27582:11;:7:::0;27592:1:::1;27582:11;:::i;:::-;27581:19;;;;:::i;:::-;27554:10;:48::i;:::-;27613;21080:42;27656:3;27641:11;:7:::0;27651:1:::1;27641:11;:::i;27613:48::-;27672:49;20902:42;27699:21;27672:10;:49::i;:::-;27439:290;27399:330::o:0;10830:104::-;10886:13;10919:7;10912:14;;;;;:::i;25957:936::-;21827:17;;;;21819:57;;;;-1:-1:-1;;;21819:57:0;;9571:2:1;21819:57:0;;;9553:21:1;9610:2;9590:18;;;9583:30;9649:29;9629:18;;;9622:57;9696:18;;21819:57:0;9369:351:1;21819:57:0;20492:5:::1;26052:13;18080:10:::0;:17;;17992:113;26052:13:::1;:25;26044:65;;;;-1:-1:-1::0;;;26044:65:0::1;;;;;;;:::i;:::-;20752:1;26128:13;:29;;26120:91;;;::::0;-1:-1:-1;;;26120:91:0;;13110:2:1;26120:91:0::1;::::0;::::1;13092:21:1::0;13149:2;13129:18;;;13122:30;13188:34;13168:18;;;13161:62;-1:-1:-1;;;13239:18:1;;;13232:47;13296:19;;26120:91:0::1;12908:413:1::0;26120:91:0::1;20492:5;26246:13;26230;18080:10:::0;:17;;17992:113;26230:13:::1;:29;;;;:::i;:::-;:42;;26222:86;;;;-1:-1:-1::0;;;26222:86:0::1;;;;;;;:::i;:::-;26341:10;26327:25;::::0;;;:13:::1;:25;::::0;;;;;20801:2:::1;::::0;26327:41:::1;::::0;26355:13;;26327:41:::1;:::i;:::-;:59;;26319:112;;;::::0;-1:-1:-1;;;26319:112:0;;17716:2:1;26319:112:0::1;::::0;::::1;17698:21:1::0;17755:2;17735:18;;;17728:30;17794:34;17774:18;;;17767:62;-1:-1:-1;;;17845:18:1;;;17838:38;17893:19;;26319:112:0::1;17514:404:1::0;26319:112:0::1;26466:1;26450:13;:17;26442:58;;;;-1:-1:-1::0;;;26442:58:0::1;;;;;;;:::i;:::-;26544:9;26519:21;26527:13:::0;20593:10:::1;26519:21;:::i;:::-;:34;26511:70;;;::::0;-1:-1:-1;;;26511:70:0;;14297:2:1;26511:70:0::1;::::0;::::1;14279:21:1::0;14336:2;14316:18;;;14309:30;-1:-1:-1;;;14355:18:1;;;14348:53;14418:18;;26511:70:0::1;14095:347:1::0;26511:70:0::1;26599:9;26594:233;26618:13;26614:1;:17;26594:233;;;26653:15;26671:14;;26688:1;26671:18;;;;:::i;:::-;26653:36;;26724:1;26706:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26754:10:0::1;26740:25;::::0;;;:13:::1;:25;::::0;;;;:30;;26769:1:::1;::::0;26740:25;:30:::1;::::0;26769:1;;26740:30:::1;:::i;:::-;::::0;;;-1:-1:-1;26785:30:0::1;::::0;-1:-1:-1;26795:10:0::1;26807:7:::0;26785:9:::1;:30::i;:::-;-1:-1:-1::0;26633:3:0;::::1;::::0;::::1;:::i;:::-;;;;26594:233;;;-1:-1:-1::0;26844:41:0::1;::::0;;26859:10:::1;6485:51:1::0;;6567:2;6552:18;;6545:34;;;26844:41:0::1;::::0;6458:18:1;26844:41:0::1;6311:274:1::0;12034:155:0;12129:52;1621:10;12162:8;12172;12129:18;:52::i;:::-;12034:155;;:::o;22787:361::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;22874:9:::1;22869:272;22889:20:::0;;::::1;22869:272;;;22963:1;22939:9:::0;;22949:1;22939:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22939:26:0::1;;;22931:62;;;;-1:-1:-1::0;;;22931:62:0::1;;;;;;;:::i;:::-;23043:4;23010:16;:30;23027:9;;23037:1;23027:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23010:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23010:30:0;;;:37;;-1:-1:-1;;23010:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;23064:13:::1;-1:-1:-1::0;23078:9:0;;23088:1;23078:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23064:27:0::1;-1:-1:-1::0;;;;;23064:27:0::1;;;;;;;;;;;;;:31;:65;;23128:1;23064:65;;;23098:13;:27;23112:9;;23122:1;23112:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23098:27:0::1;-1:-1:-1::0;;;;;23098:27:0::1;;;;;;;;;;;;;23064:65;-1:-1:-1::0;22911:3:0;::::1;::::0;::::1;:::i;:::-;;;;22869:272;;12877:328:::0;13052:41;1621:10;13085:7;13052:18;:41::i;:::-;13044:103;;;;-1:-1:-1;;;13044:103:0;;;;;;;:::i;:::-;13158:39;13172:4;13178:2;13182:7;13191:5;13158:13;:39::i;:::-;12877:328;;;;:::o;25018:931::-;21705:14;;;;;;;21697:50;;;;-1:-1:-1;;;21697:50:0;;7208:2:1;21697:50:0;;;7190:21:1;7247:2;7227:18;;;7220:30;-1:-1:-1;;;7266:18:1;;;7259:53;7329:18;;21697:50:0;7006:347:1;21697:50:0;25136:10:::1;25118:29;::::0;;;:17:::1;:29;::::0;;;;;::::1;;25110:69;;;::::0;-1:-1:-1;;;25110:69:0;;19297:2:1;25110:69:0::1;::::0;::::1;19279:21:1::0;19336:2;19316:18;;;19309:30;19375:29;19355:18;;;19348:57;19422:18;;25110:69:0::1;19095:351:1::0;25110:69:0::1;20492:5;25198:13;18080:10:::0;:17;;17992:113;25198:13:::1;:25;25190:65;;;;-1:-1:-1::0;;;25190:65:0::1;;;;;;;:::i;:::-;20654:1;25274:13;:34;;25266:94;;;;-1:-1:-1::0;;;25266:94:0::1;;;;;;;:::i;:::-;20492:5;25395:13;25379;18080:10:::0;:17;;17992:113;25379:13:::1;:29;;;;:::i;:::-;:42;;25371:86;;;;-1:-1:-1::0;;;25371:86:0::1;;;;;;;:::i;:::-;25490:10;25476:25;::::0;;;:13:::1;:25;::::0;;;;;20654:1:::1;::::0;25476:41:::1;::::0;25504:13;;25476:41:::1;:::i;:::-;:62;;25468:103;;;::::0;-1:-1:-1;;;25468:103:0;;20066:2:1;25468:103:0::1;::::0;::::1;20048:21:1::0;20105:2;20085:18;;;20078:30;20144;20124:18;;;20117:58;20192:18;;25468:103:0::1;19864:352:1::0;25468:103:0::1;25606:1;25590:13;:17;25582:58;;;;-1:-1:-1::0;;;25582:58:0::1;;;;;;;:::i;:::-;25658:9;25653:233;25677:13;25673:1;:17;25653:233;;;25712:15;25730:14;;25747:1;25730:18;;;;:::i;:::-;25712:36;;25783:1;25765:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25813:10:0::1;25799:25;::::0;;;:13:::1;:25;::::0;;;;:30;;25828:1:::1;::::0;25799:25;:30:::1;::::0;25828:1;;25799:30:::1;:::i;:::-;::::0;;;-1:-1:-1;25844:30:0::1;::::0;-1:-1:-1;25854:10:0::1;25866:7:::0;25844:9:::1;:30::i;:::-;-1:-1:-1::0;25692:3:0;::::1;::::0;::::1;:::i;:::-;;;;25653:233;;;-1:-1:-1::0;25903:38:0::1;::::0;;25915:10:::1;6485:51:1::0;;6567:2;6552:18;;6545:34;;;25903:38:0::1;::::0;6458:18:1;25903:38:0::1;6311:274:1::0;10942:334:0;13601:4;13625:16;;;:7;:16;;;;;;11015:13;;-1:-1:-1;;;;;13625:16:0;11041:76;;;;-1:-1:-1;;;11041:76:0;;16181:2:1;11041:76:0;;;16163:21:1;16220:2;16200:18;;;16193:30;16259:34;16239:18;;;16232:62;-1:-1:-1;;;16310:18:1;;;16303:45;16365:19;;11041:76:0;15979:411:1;11041:76:0;11130:21;11154:10;:8;:10::i;:::-;11130:34;;11206:1;11188:7;11182:21;:25;:86;;;;;;;;;;;;;;;;;11234:7;11243:18;:7;:16;:18::i;:::-;11217:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11182:86;11175:93;10942:334;-1:-1:-1;;;10942:334:0:o;21208:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26901:102::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;26981:14:::1;::::0;;-1:-1:-1;;26963:32:0;::::1;26981:14;::::0;;;::::1;;;26980:15;26963:32:::0;;::::1;;::::0;;26901:102::o;3090:201::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3179:22:0;::::1;3171:73;;;::::0;-1:-1:-1;;;3171:73:0;;8807:2:1;3171:73:0::1;::::0;::::1;8789:21:1::0;8846:2;8826:18;;;8819:30;8885:34;8865:18;;;8858:62;-1:-1:-1;;;8936:18:1;;;8929:36;8982:19;;3171:73:0::1;8605:402:1::0;3171:73:0::1;3255:28;3274:8;3255:18;:28::i;23985:1025::-:0;21705:14;;;;;;;21697:50;;;;-1:-1:-1;;;21697:50:0;;7208:2:1;21697:50:0;;;7190:21:1;7247:2;7227:18;;;7220:30;-1:-1:-1;;;7266:18:1;;;7259:53;7329:18;;21697:50:0;7006:347:1;21697:50:0;24101:10:::1;24084:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;24076:77;;;::::0;-1:-1:-1;;;24076:77:0;;10686:2:1;24076:77:0::1;::::0;::::1;10668:21:1::0;10725:2;10705:18;;;10698:30;10764:34;10744:18;;;10737:62;-1:-1:-1;;;10815:18:1;;;10808:34;10859:19;;24076:77:0::1;10484:400:1::0;24076:77:0::1;20492:5;24172:13;18080:10:::0;:17;;17992:113;24172:13:::1;:25;24164:65;;;;-1:-1:-1::0;;;24164:65:0::1;;;;;;;:::i;:::-;20705:1;24248:13;:33;;24240:93;;;;-1:-1:-1::0;;;24240:93:0::1;;;;;;;:::i;:::-;20492:5;24368:13;24352;18080:10:::0;:17;;17992:113;24352:13:::1;:29;;;;:::i;:::-;:42;;24344:86;;;;-1:-1:-1::0;;;24344:86:0::1;;;;;;;:::i;:::-;24463:10;24449:25;::::0;;;:13:::1;:25;::::0;;;;;20705:1:::1;::::0;24449:41:::1;::::0;24477:13;;24449:41:::1;:::i;:::-;:61;;24441:102;;;::::0;-1:-1:-1;;;24441:102:0;;20066:2:1;24441:102:0::1;::::0;::::1;20048:21:1::0;20105:2;20085:18;;;20078:30;20144;20124:18;;;20117:58;20192:18;;24441:102:0::1;19864:352:1::0;24441:102:0::1;24578:1;24562:13;:17;24554:58;;;;-1:-1:-1::0;;;24554:58:0::1;;;;;;;:::i;:::-;24664:9;24631:29;24647:13:::0;20544:10:::1;24631:29;:::i;:::-;:42;24623:78;;;::::0;-1:-1:-1;;;24623:78:0;;14297:2:1;24623:78:0::1;::::0;::::1;14279:21:1::0;14336:2;14316:18;;;14309:30;-1:-1:-1;;;14355:18:1;;;14348:53;14418:18;;24623:78:0::1;14095:347:1::0;24623:78:0::1;24719:9;24714:233;24738:13;24734:1;:17;24714:233;;;24773:15;24791:14;;24808:1;24791:18;;;;:::i;:::-;24773:36;;24844:1;24826:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24874:10:0::1;24860:25;::::0;;;:13:::1;:25;::::0;;;;:30;;24889:1:::1;::::0;24860:25;:30:::1;::::0;24889:1;;24860:30:::1;:::i;:::-;::::0;;;-1:-1:-1;24905:30:0::1;::::0;-1:-1:-1;24915:10:0::1;24927:7:::0;24905:9:::1;:30::i;:::-;-1:-1:-1::0;24753:3:0;::::1;::::0;::::1;:::i;:::-;;;;24714:233;;9944:305:::0;10046:4;-1:-1:-1;;;;;;10083:40:0;;-1:-1:-1;;;10083:40:0;;:105;;-1:-1:-1;;;;;;;10140:48:0;;-1:-1:-1;;;10140:48:0;10083:105;:158;;;-1:-1:-1;;;;;;;;;;7572:40:0;;;10205:36;7463:157;15738:174;15813:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15813:29:0;-1:-1:-1;;;;;15813:29:0;;;;;;;;:24;;15867:23;15813:24;15867:14;:23::i;:::-;-1:-1:-1;;;;;15858:46:0;;;;;;;;;;;15738:174;;:::o;14027:110::-;14103:26;14113:2;14117:7;14103:26;;;;;;;;;;;;:9;:26::i;13671:348::-;13764:4;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;13781:73;;;;-1:-1:-1;;;13781:73:0;;11091:2:1;13781:73:0;;;11073:21:1;11130:2;11110:18;;;11103:30;11169:34;11149:18;;;11142:62;-1:-1:-1;;;11220:18:1;;;11213:42;11272:19;;13781:73:0;10889:408:1;13781:73:0;13865:13;13881:23;13896:7;13881:14;:23::i;:::-;13865:39;;13934:5;-1:-1:-1;;;;;13923:16:0;:7;-1:-1:-1;;;;;13923:16:0;;:51;;;;13967:7;-1:-1:-1;;;;;13943:31:0;:20;13955:7;13943:11;:20::i;:::-;-1:-1:-1;;;;;13943:31:0;;13923:51;:87;;;-1:-1:-1;;;;;;12318:25:0;;;12294:4;12318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13978:32;13915:96;13671:348;-1:-1:-1;;;;13671:348:0:o;15204:526::-;15363:4;-1:-1:-1;;;;;15336:31:0;:23;15351:7;15336:14;:23::i;:::-;-1:-1:-1;;;;;15336:31:0;;15328:85;;;;-1:-1:-1;;;15328:85:0;;15771:2:1;15328:85:0;;;15753:21:1;15810:2;15790:18;;;15783:30;15849:34;15829:18;;;15822:62;-1:-1:-1;;;15900:18:1;;;15893:39;15949:19;;15328:85:0;15569:405:1;15328:85:0;-1:-1:-1;;;;;15432:16:0;;15424:65;;;;-1:-1:-1;;;15424:65:0;;9927:2:1;15424:65:0;;;9909:21:1;9966:2;9946:18;;;9939:30;10005:34;9985:18;;;9978:62;-1:-1:-1;;;10056:18:1;;;10049:34;10100:19;;15424:65:0;9725:400:1;15424:65:0;15502:39;15523:4;15529:2;15533:7;15502:20;:39::i;:::-;15554:29;15571:1;15575:7;15554:8;:29::i;:::-;-1:-1:-1;;;;;15596:15:0;;;;;;:9;:15;;;;;:20;;15615:1;;15596:15;:20;;15615:1;;15596:20;:::i;:::-;;;;-1:-1:-1;;;;;;;15627:13:0;;;;;;:9;:13;;;;;:18;;15644:1;;15627:13;:18;;15644:1;;15627:18;:::i;:::-;;;;-1:-1:-1;;15656:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15656:21:0;-1:-1:-1;;;;;15656:21:0;;;;;;;;;15695:27;;15656:16;;15695:27;;;;;;;15204:526;;;:::o;3299:191::-;3392:6;;;-1:-1:-1;;;;;3409:17:0;;;-1:-1:-1;;;;;;3409:17:0;;;;;;;3442:40;;3392:6;;;3409:17;3392:6;;3442:40;;3373:16;;3442:40;3362:128;3299:191;:::o;27737:192::-;27812:12;27830:8;-1:-1:-1;;;;;27830:13:0;27852:7;27830:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27811:54;;;27884:7;27876:45;;;;-1:-1:-1;;;27876:45:0;;17362:2:1;27876:45:0;;;17344:21:1;17401:2;17381:18;;;17374:30;17440:27;17420:18;;;17413:55;17485:18;;27876:45:0;17160:349:1;15920:315:0;16075:8;-1:-1:-1;;;;;16066:17:0;:5;-1:-1:-1;;;;;16066:17:0;;;16058:55;;;;-1:-1:-1;;;16058:55:0;;10332:2:1;16058:55:0;;;10314:21:1;10371:2;10351:18;;;10344:30;10410:27;10390:18;;;10383:55;10455:18;;16058:55:0;10130:349:1;16058:55:0;-1:-1:-1;;;;;16124:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;16124:46:0;;;;;;;;;;16186:41;;6730::1;;;16186::0;;6703:18:1;16186:41:0;;;;;;;15920:315;;;:::o;13213:::-;13370:28;13380:4;13386:2;13390:7;13370:9;:28::i;:::-;13417:48;13440:4;13446:2;13450:7;13459:5;13417:22;:48::i;:::-;13409:111;;;;-1:-1:-1;;;13409:111:0;;;;;;;:::i;27130:113::-;27190:13;27223:12;27216:19;;;;;:::i;152:542::-;208:13;248:10;244:53;;-1:-1:-1;;275:10:0;;;;;;;;;;;;-1:-1:-1;;;275:10:0;;;;;152:542::o;244:53::-;322:5;307:12;363:78;370:9;;363:78;;396:8;;;;:::i;:::-;;-1:-1:-1;419:10:0;;-1:-1:-1;427:2:0;419:10;;:::i;:::-;;;363:78;;;451:19;483:6;473:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;473:17:0;;451:39;;501:154;508:10;;501:154;;535:11;545:1;535:11;;:::i;:::-;;-1:-1:-1;604:10:0;612:2;604:5;:10;:::i;:::-;591:24;;:2;:24;:::i;:::-;578:39;;561:6;568;561:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;561:56:0;;;;;;;;-1:-1:-1;632:11:0;641:2;632:11;;:::i;:::-;;;501:154;;14145:321;14275:18;14281:2;14285:7;14275:5;:18::i;:::-;14326:54;14357:1;14361:2;14365:7;14374:5;14326:22;:54::i;:::-;14304:154;;;;-1:-1:-1;;;14304:154:0;;;;;;;:::i;18354:589::-;-1:-1:-1;;;;;18560:18:0;;18556:187;;18595:40;18627:7;19284:10;:17;;19257:24;;;;:15;:24;;;;;:44;;;19312:24;;;;;;;;;;;;19180:164;18595:40;18556:187;;;18665:2;-1:-1:-1;;;;;18657:10:0;:4;-1:-1:-1;;;;;18657:10:0;;18653:90;;18684:47;18717:4;18723:7;18684:32;:47::i;:::-;-1:-1:-1;;;;;18757:16:0;;18753:183;;18790:45;18827:7;18790:36;:45::i;18753:183::-;18863:4;-1:-1:-1;;;;;18857:10:0;:2;-1:-1:-1;;;;;18857:10:0;;18853:83;;18884:40;18912:2;18916:7;18884:27;:40::i;16243:799::-;16398:4;-1:-1:-1;;;;;16419:13:0;;3668:20;3716:8;16415:620;;16455:72;;-1:-1:-1;;;16455:72:0;;-1:-1:-1;;;;;16455:36:0;;;;;:72;;1621:10;;16506:4;;16512:7;;16521:5;;16455:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16455:72:0;;;;;;;;-1:-1:-1;;16455:72:0;;;;;;;;;;;;:::i;:::-;;;16451:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16697:13:0;;16693:272;;16740:60;;-1:-1:-1;;;16740:60:0;;;;;;;:::i;16693:272::-;16915:6;16909:13;16900:6;16896:2;16892:15;16885:38;16451:529;-1:-1:-1;;;;;;16578:51:0;-1:-1:-1;;;16578:51:0;;-1:-1:-1;16571:58:0;;16415:620;-1:-1:-1;17019:4:0;16243:799;;;;;;:::o;14474:382::-;-1:-1:-1;;;;;14554:16:0;;14546:61;;;;-1:-1:-1;;;14546:61:0;;13936:2:1;14546:61:0;;;13918:21:1;;;13955:18;;;13948:30;14014:34;13994:18;;;13987:62;14066:18;;14546:61:0;13734:356:1;14546:61:0;13601:4;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;:30;14618:58;;;;-1:-1:-1;;;14618:58:0;;9214:2:1;14618:58:0;;;9196:21:1;9253:2;9233:18;;;9226:30;9292;9272:18;;;9265:58;9340:18;;14618:58:0;9012:352:1;14618:58:0;14689:45;14718:1;14722:2;14726:7;14689:20;:45::i;:::-;-1:-1:-1;;;;;14747:13:0;;;;;;:9;:13;;;;;:18;;14764:1;;14747:13;:18;;14764:1;;14747:18;:::i;:::-;;;;-1:-1:-1;;14776:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14776:21:0;-1:-1:-1;;;;;14776:21:0;;;;;;;;14815:33;;14776:16;;;14815:33;;14776:16;;14815:33;14474:382;;:::o;19352:560::-;19447:22;19497:1;19472:22;19489:4;19472:16;:22::i;:::-;:26;;;;:::i;:::-;19509:18;19530:26;;;:17;:26;;;;;;19447:51;;-1:-1:-1;19573:28:0;;;19569:238;;-1:-1:-1;;;;;19640:18:0;;19618:19;19640:18;;;:12;:18;;;;;;;;:34;;;;;;;;;19691:30;;;;;;:44;;;19751:30;;:17;:30;;;;;:43;;;19569:238;-1:-1:-1;19826:26:0;;;;:17;:26;;;;;;;;19819:33;;;-1:-1:-1;;;;;19870:18:0;;;;;:12;:18;;;;;:34;;;;;;;19863:41;19352:560::o;19920:437::-;20037:10;:17;20012:22;;20037:21;;20057:1;;20037:21;:::i;:::-;20069:18;20090:24;;;:15;:24;;;;;;20149:10;:26;;20012:46;;-1:-1:-1;20090:24:0;;20012:46;;20149:26;;;;;;:::i;:::-;;;;;;;;;20127:48;;20213:11;20188:10;20199;20188:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;20236:28;;;:15;:28;;;;;;;:41;;;20298:24;;;;;20291:31;20333:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19991:366;;;19920:437;:::o;18951:221::-;19036:14;19053:20;19070:2;19053:16;:20::i;:::-;-1:-1:-1;;;;;19084:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;19129:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;18951:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;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:45;;;532:1;529;522:12;491:45;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;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:615::-;2985:6;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3102:9;3089:23;3131:18;3172:2;3164:6;3161:14;3158:34;;;3188:1;3185;3178:12;3158:34;3226:6;3215:9;3211:22;3201:32;;3271:7;3264:4;3260:2;3256:13;3252:27;3242:55;;3293:1;3290;3283:12;3242:55;3333:2;3320:16;3359:2;3351:6;3348:14;3345:34;;;3375:1;3372;3365:12;3345:34;3428:7;3423:2;3413:6;3410:1;3406:14;3402:2;3398:23;3394:32;3391:45;3388:65;;;3449:1;3446;3439:12;3388:65;3480:2;3472:11;;;;;3502:6;;-1:-1:-1;2899:615:1;;-1:-1:-1;;;;2899:615:1:o;3519:245::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:30;3728:5;3704:30;:::i;3769:249::-;3838:6;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;3939:9;3933:16;3958:30;3982:5;3958:30;:::i;4023:450::-;4092:6;4145:2;4133:9;4124:7;4120:23;4116:32;4113:52;;;4161:1;4158;4151:12;4113:52;4201:9;4188:23;4234:18;4226:6;4223:30;4220:50;;;4266:1;4263;4256:12;4220:50;4289:22;;4342:4;4334:13;;4330:27;-1:-1:-1;4320:55:1;;4371:1;4368;4361:12;4320:55;4394:73;4459:7;4454:2;4441:16;4436:2;4432;4428:11;4394:73;:::i;4478:180::-;4537:6;4590:2;4578:9;4569:7;4565:23;4561:32;4558:52;;;4606:1;4603;4596:12;4558:52;-1:-1:-1;4629:23:1;;4478:180;-1:-1:-1;4478:180:1:o;4663:257::-;4704:3;4742:5;4736:12;4769:6;4764:3;4757:19;4785:63;4841:6;4834:4;4829:3;4825:14;4818:4;4811:5;4807:16;4785:63;:::i;:::-;4902:2;4881:15;-1:-1:-1;;4877:29:1;4868:39;;;;4909:4;4864:50;;4663:257;-1:-1:-1;;4663:257:1:o;4925:470::-;5104:3;5142:6;5136:13;5158:53;5204:6;5199:3;5192:4;5184:6;5180:17;5158:53;:::i;:::-;5274:13;;5233:16;;;;5296:57;5274:13;5233:16;5330:4;5318:17;;5296:57;:::i;:::-;5369:20;;4925:470;-1:-1:-1;;;;4925:470:1:o;5818:488::-;-1:-1:-1;;;;;6087:15:1;;;6069:34;;6139:15;;6134:2;6119:18;;6112:43;6186:2;6171:18;;6164:34;;;6234:3;6229:2;6214:18;;6207:31;;;6012:4;;6255:45;;6280:19;;6272:6;6255:45;:::i;:::-;6247:53;5818:488;-1:-1:-1;;;;;;5818:488:1:o;6782:219::-;6931:2;6920:9;6913:21;6894:4;6951:44;6991:2;6980:9;6976:18;6968:6;6951:44;:::i;7358:411::-;7560:2;7542:21;;;7599:2;7579:18;;;7572:30;7638:34;7633:2;7618:18;;7611:62;-1:-1:-1;;;7704:2:1;7689:18;;7682:45;7759:3;7744:19;;7358:411::o;8186:414::-;8388:2;8370:21;;;8427:2;8407:18;;;8400:30;8466:34;8461:2;8446:18;;8439:62;-1:-1:-1;;;8532:2:1;8517:18;;8510:48;8590:3;8575:19;;8186:414::o;12548:355::-;12750:2;12732:21;;;12789:2;12769:18;;;12762:30;12828:33;12823:2;12808:18;;12801:61;12894:2;12879:18;;12548:355::o;15208:356::-;15410:2;15392:21;;;15429:18;;;15422:30;15488:34;15483:2;15468:18;;15461:62;15555:2;15540:18;;15208:356::o;16803:352::-;17005:2;16987:21;;;17044:2;17024:18;;;17017:30;17083;17078:2;17063:18;;17056:58;17146:2;17131:18;;16803:352::o;18325:347::-;18527:2;18509:21;;;18566:2;18546:18;;;18539:30;18605:25;18600:2;18585:18;;18578:53;18663:2;18648:18;;18325:347::o;18677:413::-;18879:2;18861:21;;;18918:2;18898:18;;;18891:30;18957:34;18952:2;18937:18;;18930:62;-1:-1:-1;;;19023:2:1;19008:18;;19001:47;19080:3;19065:19;;18677:413::o;20221:351::-;20423:2;20405:21;;;20462:2;20442:18;;;20435:30;20501:29;20496:2;20481:18;;20474:57;20563:2;20548:18;;20221:351::o;20759:128::-;20799:3;20830:1;20826:6;20823:1;20820:13;20817:39;;;20836:18;;:::i;:::-;-1:-1:-1;20872:9:1;;20759:128::o;20892:120::-;20932:1;20958;20948:35;;20963:18;;:::i;:::-;-1:-1:-1;20997:9:1;;20892:120::o;21017:168::-;21057:7;21123:1;21119;21115:6;21111:14;21108:1;21105:21;21100:1;21093:9;21086:17;21082:45;21079:71;;;21130:18;;:::i;:::-;-1:-1:-1;21170:9:1;;21017:168::o;21190:125::-;21230:4;21258:1;21255;21252:8;21249:34;;;21263:18;;:::i;:::-;-1:-1:-1;21300:9:1;;21190:125::o;21320:258::-;21392:1;21402:113;21416:6;21413:1;21410:13;21402:113;;;21492:11;;;21486:18;21473:11;;;21466:39;21438:2;21431:10;21402:113;;;21533:6;21530:1;21527:13;21524:48;;;-1:-1:-1;;21568:1:1;21550:16;;21543:27;21320:258::o;21583:380::-;21662:1;21658:12;;;;21705;;;21726:61;;21780:4;21772:6;21768:17;21758:27;;21726:61;21833:2;21825:6;21822:14;21802:18;21799:38;21796:161;;;21879:10;21874:3;21870:20;21867:1;21860:31;21914:4;21911:1;21904:15;21942:4;21939:1;21932:15;21796:161;;21583:380;;;:::o;21968:135::-;22007:3;-1:-1:-1;;22028:17:1;;22025:43;;;22048:18;;:::i;:::-;-1:-1:-1;22095:1:1;22084:13;;21968:135::o;22108:112::-;22140:1;22166;22156:35;;22171:18;;:::i;:::-;-1:-1:-1;22205:9:1;;22108:112::o;22225:127::-;22286:10;22281:3;22277:20;22274:1;22267:31;22317:4;22314:1;22307:15;22341:4;22338:1;22331:15;22357:127;22418:10;22413:3;22409:20;22406:1;22399:31;22449:4;22446:1;22439:15;22473:4;22470:1;22463:15;22489:127;22550:10;22545:3;22541:20;22538:1;22531:31;22581:4;22578:1;22571:15;22605:4;22602:1;22595:15;22621:127;22682:10;22677:3;22673:20;22670:1;22663:31;22713:4;22710:1;22703:15;22737:4;22734:1;22727:15;22753:127;22814:10;22809:3;22805:20;22802:1;22795:31;22845:4;22842:1;22835:15;22869:4;22866:1;22859:15;22885:131;-1:-1:-1;;;;;;22959:32:1;;22949:43;;22939:71;;23006:1;23003;22996:12

Swarm Source

ipfs://77c954fa6f394740dfd0f47e27afddb1ae86e5668827d43e40bc5013dbf065a6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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