ETH Price: $3,107.15 (+0.29%)
Gas: 3 Gwei

Token

Dooggies (Dooggies)
 

Overview

Max Total Supply

9,993 Dooggies

Holders

275

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
avdic.eth
Balance
6 Dooggies
0x7f70de98d9a15b22baccfcb44d39d38687360a9d
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:
WrapYourDooggies

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-11
*/

// SPDX-License-Identifier: MIT

//  ▄▄▄▄▄▄  ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ 
// █      ██       █       █       █       █   █       █       █
// █  ▄    █   ▄   █   ▄   █   ▄▄▄▄█   ▄▄▄▄█   █    ▄▄▄█  ▄▄▄▄▄█
// █ █ █   █  █ █  █  █ █  █  █  ▄▄█  █  ▄▄█   █   █▄▄▄█ █▄▄▄▄▄ 
// █ █▄█   █  █▄█  █  █▄█  █  █ █  █  █ █  █   █    ▄▄▄█▄▄▄▄▄  █
// █       █       █       █  █▄▄█ █  █▄▄█ █   █   █▄▄▄ ▄▄▄▄▄█ █
// █▄▄▄▄▄▄██▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█
//
//  ▄▄   ▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄  ▄▄▄▄▄▄▄    ▄     ▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄   ▄▄ 
// █  █▄█  █      █      ██       █  █ █ ▄ █ █   █       █  █ █  █
// █       █  ▄   █  ▄    █    ▄▄▄█  █ ██ ██ █   █▄     ▄█  █▄█  █
// █       █ █▄█  █ █ █   █   █▄▄▄   █       █   █ █   █ █       █
// █       █      █ █▄█   █    ▄▄▄█  █       █   █ █   █ █   ▄   █
// █ ██▄██ █  ▄   █       █   █▄▄▄   █   ▄   █   █ █   █ █  █ █  █
// █▄█   █▄█▄█ █▄▄█▄▄▄▄▄▄██▄▄▄▄▄▄▄█  █▄▄█ █▄▄█▄▄▄█ █▄▄▄█ █▄▄█ █▄▄█
//
//  ▄▄▄     ▄▄▄▄▄▄▄ ▄▄   ▄▄ ▄▄▄▄▄▄▄ 
// █   █   █       █  █ █  █       █
// █   █   █   ▄   █  █▄█  █    ▄▄▄█
// █   █   █  █ █  █       █   █▄▄▄ 
// █   █▄▄▄█  █▄█  █       █    ▄▄▄█
// █       █       ██     ██   █▄▄▄ 
// █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█
//

pragma solidity 0.8.10;

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

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,
        bytes calldata data
    ) external;
    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 setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
}

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

library Strings {
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

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

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    IERC1155 internal dooggies;
    bool internal _isMintedOut = false;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) internal _owners;
    mapping(address => uint256) internal _balances;
    mapping(uint => uint) internal idStakeLockTimes;
    mapping(uint => bool) internal OGDooggiesMintedNewNew;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_, address dooggiesContract) {
        _name = name_;
        _symbol = symbol_;
        dooggies = IERC1155(dooggiesContract);
    }

    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) external view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        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");
        if(_isMintedOut == false && idStakeLockTimes[tokenId] != 0 && OGDooggiesMintedNewNew[tokenId] == false) {
            return address(this);
        }
        return owner;
    }

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

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

    function tokenURI(uint256 tokenId) external 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) external 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) external 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
    ) external 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender || owner == address(this));
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        if(_isMintedOut == false) {
            require(idStakeLockTimes[tokenId] == 0 || OGDooggiesMintedNewNew[tokenId], "NFT Cant currently be sent cause its staked");
        }
        require(ERC721.ownerOf(tokenId) == from || from == address(this), "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        // Clear approvals from the previous owner
        _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;
        }
    }
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

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

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
    }

    uint256 internal _currentIndex;
    string private _name;
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    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) external view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
                while (true) {
                    curr--;
                    ownership = _ownerships[curr];
                    if (ownership.addr != address(0)) {
                            return ownership;
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

    function tokenURI(uint256 tokenId) external view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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) external override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }
}

contract DooggiesSnack is ERC721A, Ownable {
    address private devOwner;
    address private whoCanMint;
    bool internal _revealed = false;
    bool internal mintEnabled = true;

    string private baseURIForNewNew = "ipfs://QmUtKHbiThL5FikUuUgvLrH7HdNzQ9KmfUtDsE6o3hUKTp";
    string private baseExt = "";

    constructor(address owner_, address whoCanMint_) ERC721A("DooggiesSnack", "DooggiesSnack") { // not the real name ;)
        devOwner = owner_;
        whoCanMint = whoCanMint_;
    }

    receive() external payable {
        (bool sent, ) = payable(owner()).call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function mint(uint256 numberOfTokens, address user) external {
        require(mintEnabled, "Cant mint yet");
        require(whoCanMint == msg.sender, "You cant mint");
        require(
            numberOfTokens + totalSupply() <= 5000,
            "Not enough supply"
        );
        _safeMint(user, numberOfTokens);
    }

    function reveal(bool revealed, string calldata _baseURI) external {
        require(msg.sender == devOwner, "You are not the owner");
        _revealed = revealed;
        baseURIForNewNew = _baseURI;
    }

    function setExtension(string calldata _baseExt) external {
        require(msg.sender == devOwner, "You are not the owner");
        baseExt = _baseExt;
    }

    function updateOwner(address owner_) external {
        require(msg.sender == devOwner, "You are not the owner");
        require(owner_ != address(0));
        devOwner = owner_;
    }

    function toggleMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        mintEnabled = !mintEnabled;
    }

    function isMintEnabled() external view returns (bool) {
        return mintEnabled;
    }

    function tokenURI(uint256 tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        if (_revealed) {
            return string(abi.encodePacked(baseURIForNewNew, Strings.toString(tokenId), baseExt));
        } else {
            return string(abi.encodePacked(baseURIForNewNew));
        }
    }
}

contract WrapYourDooggies is ERC721, ReentrancyGuard, IERC721Receiver, IERC1155Receiver, Ownable {
    address private devOwner;
    bool private lockMintForever = false;
    uint private totalAmount = 0;

    uint constant private dayCount = 60 days;
    uint constant private mintOutLock = 365 days;
    uint private whenDidWeDeploy;

    string private baseURIForOGDooggies = "ipfs://QmSRPvb4E4oT8J73QoWGyvdFizWzpMkkSozAnCEMjT5K7G/";
    string private baseExt = "";

    DooggiesSnack dooggiesSnack; // Hmm you curious what this could be if youre a reader of the github???

    constructor(address dooggiesContract) ERC721("Dooggies", "Dooggies", dooggiesContract) {
        devOwner = address(0xf8c45B2375a574BecA18224C47353969C044a9EC);
        dooggiesSnack = new DooggiesSnack(devOwner, address(this));
        whenDidWeDeploy = block.timestamp;
    }

    receive() external payable {
        (bool sent, ) = payable(owner()).call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function wrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function unwrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(address(this), msg.sender, tokenIds, qty, "");
        }
    }

    function wrapManyAndStake(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
                // lol so it shows up on Opensea xD
                // since we want to funnel people here on first wrap :)
                // This will put it in the users wallet on opensea but not allow
                // them to sell since they dont own the asset
                emit Transfer(msg.sender, address(this), tokenIds[i]);
            }
        }
    }

    function stakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
            }
        }
    }

    function unStakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;

            for(uint i = 0; i < count; i++) {
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                require(idStakeLockTimes[tokenIds[i]] != 0, "Bruh.. this is not staked");
                idStakeLockTimes[tokenIds[i]] = 0;
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function zMintNewNew(uint[] calldata tokenIds) nonReentrant external {
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            require(count >= 2, "You need at least two dooggies to mint");

            uint amountToMint = 0;
            uint8 localCounter = 0;
            for(uint i = 0; i < count; i++) {
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only mint once.");
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                if(block.timestamp - idStakeLockTimes[tokenIds[i]] >= dayCount) {
                    OGDooggiesMintedNewNew[tokenIds[i]] = true;
                    localCounter += 1;
                    if(localCounter >= 2) {
                        localCounter = 0;
                        amountToMint += 1;
                    }
                    safeTransferFrom(address(this), msg.sender, tokenIds[i]);
                }
            }
            require(amountToMint > 0, "Need to have some to mint");

            dooggiesSnack.mint(amountToMint, msg.sender);
        }
    }

    function zzMintOutMystery(uint amount) external {
        require(msg.sender == devOwner, "You are not the owner");
        
        // give people time to wrap for the mystery mint. 
        // they will always be able to wrap but not be able to mint out
        require(block.timestamp - whenDidWeDeploy >= mintOutLock);
        
        dooggiesSnack.mint(amount, msg.sender);

        if(dooggiesSnack.totalSupply() > 4999) {
            _isMintedOut = true;
        }
    }

    function zzLockMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        require(lockMintForever == false, "Mint is already locked");
        lockMintForever = true;
    }

    function zzinitialise(uint256[] calldata tokenIds) external {
        require(lockMintForever == false, "You can no longer mint");
        require(msg.sender == devOwner, "You are not the owner");

        uint count = tokenIds.length;
        require(count > 0, "Must have something");
        _balances[address(this)] += count;

        emit Transfer(address(this), address(this), tokenIds[0]);

        unchecked {
            totalAmount += count;
        }

        // update the balances so that on wrapping the contract logic works
        for (uint256 i = 0; i < count; i++) {
            require(_owners[tokenIds[i]] == address(0), "You cant mint twice");
            _owners[tokenIds[i]] = address(this);
        }
    }

    function updateOwner(address owner_) external {
        require(msg.sender == devOwner, "You are not the owner");
        require(owner_ != address(0));
        devOwner = owner_;
    }

    function setExtension(string calldata _baseExt) external {
        require(msg.sender == devOwner, "You are not the owner");
        baseExt = _baseExt;
    }

    function onERC721Received(address, address, uint256, bytes calldata) pure external returns(bytes4) {
        return WrapYourDooggies.onERC721Received.selector;
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155BatchReceived.selector;
    }

    function tokenURI(uint256 tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        return string(abi.encodePacked(baseURIForOGDooggies, Strings.toString(tokenId), baseExt)); 
    }

    function setURIOG(string calldata _baseURI) external {
        require(msg.sender == devOwner, "Step off brah");
        baseURIForOGDooggies = _baseURI;
    }

    function totalSupply() external view returns (uint256) {
        return totalAmount;
    }

    function newnewAddress() external view returns (address) {
        return address(dooggiesSnack);
    }

    function timeLeftForID(uint tokenID) external view returns (uint) {
        if((block.timestamp - idStakeLockTimes[tokenID]) < dayCount) {
            return dayCount - (block.timestamp - idStakeLockTimes[tokenID]);
        } else {
            return 0;
        }
    }

    function hasIDBeenMinted(uint tokenID) external view returns (bool) {
        return OGDooggiesMintedNewNew[tokenID];
    }

    function isStaked(uint tokenID) external view returns (bool) {
        return idStakeLockTimes[tokenID] != 0 && OGDooggiesMintedNewNew[tokenID] == false;
    }

    function isMintLocked() external view returns (bool) {
        return lockMintForever;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dooggiesContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"hasIDBeenMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newnewAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"_baseExt","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setURIOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"timeLeftForID","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":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unStakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unwrapMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"wrapMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"wrapManyAndStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"zMintNewNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zzLockMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zzMintOutMystery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"zzinitialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000805460ff60a01b199081168255600b80549091169055600c5560e06040526036608081815290620054ad60a03980516200004491600e9160209091019062000217565b506040805160208101918290526000908190526200006591600f9162000217565b503480156200007357600080fd5b50604051620054e3380380620054e38339810160408190526200009691620002cb565b604080518082018252600880825267446f6f676769657360c01b6020808401828152855180870190965292855284015281519192918491620000dc916001919062000217565b508151620000f290600290602085019062000217565b50600080546001600160a01b0319166001600160a01b0392909216919091179055505060016009556200012c620001263390565b620001c5565b600b80546001600160a01b03191673f8c45b2375a574beca18224c47353969c044a9ec90811790915560405130906200016590620002a6565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000199573d6000803e3d6000fd5b50601080546001600160a01b0319166001600160a01b03929092169190911790555042600d556200033a565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200022590620002fd565b90600052602060002090601f01602090048101928262000249576000855562000294565b82601f106200026457805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029457825182559160200191906001019062000277565b50620002a2929150620002b4565b5090565b611cdc80620037d183390190565b5b80821115620002a25760008155600101620002b5565b600060208284031215620002de57600080fd5b81516001600160a01b0381168114620002f657600080fd5b9392505050565b600181811c908216806200031257607f821691505b602082108114156200033457634e487b7160e01b600052602260045260246000fd5b50919050565b613487806200034a6000396000f3fe6080604052600436106102135760003560e01c80638b4ca17811610118578063bfd97f7f116100a0578063e985e9c51161006f578063e985e9c514610709578063ef7441a414610752578063f23a6e6114610772578063f2fde38b1461079f578063fe939afc146107bf57600080fd5b8063bfd97f7f1461068a578063c1dcd138146106aa578063c87b56dd146106ca578063df10580a146106ea57600080fd5b8063a22cb465116100e7578063a22cb465146105dd578063b81ec87d146105fd578063b88d4fde1461061b578063baa51f861461063b578063bc197c811461065b57600080fd5b80638b4ca1781461055a5780638da5cb5b1461058a57806393ee670c146105a857806395d89b41146105c857600080fd5b806323b872dd1161019b57806370a082311161016a57806370a08231146104c55780637b32b19c146104e55780637e2285aa146104fa578063880cdc311461051a578063884e07411461053a57600080fd5b806323b872dd146104455780633afd48611461046557806342842e0e146104855780636352211e146104a557600080fd5b8063095ea7b3116101e2578063095ea7b3146103815780630ea2d79e146103a1578063150b7a02146103c15780631782ba911461040657806318160ddd1461042657600080fd5b806301b7bb75146102d057806301ffc9a7146102f257806306fdde0314610327578063081812fc1461034957600080fd5b366102cb57600061022c600a546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610276576040519150601f19603f3d011682016040523d82523d6000602084013e61027b565b606091505b50509050806102c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156102dc57600080fd5b506102f06102eb366004612a22565b6107df565b005b3480156102fe57600080fd5b5061031261030d366004612a7a565b610b06565b60405190151581526020015b60405180910390f35b34801561033357600080fd5b5061033c610b58565b60405161031e9190612af6565b34801561035557600080fd5b50610369610364366004612b09565b610bea565b6040516001600160a01b03909116815260200161031e565b34801561038d57600080fd5b506102f061039c366004612b39565b610c7f565b3480156103ad57600080fd5b506102f06103bc366004612a22565b610d95565b3480156103cd57600080fd5b506103ed6103dc366004612ba5565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161031e565b34801561041257600080fd5b506102f0610421366004612b09565b610fa6565b34801561043257600080fd5b50600c545b60405190815260200161031e565b34801561045157600080fd5b506102f0610460366004612c14565b6110e9565b34801561047157600080fd5b506102f0610480366004612a22565b61111a565b34801561049157600080fd5b506102f06104a0366004612c14565b6112e9565b3480156104b157600080fd5b506103696104c0366004612b09565b611304565b3480156104d157600080fd5b506104376104e0366004612c50565b6113ca565b3480156104f157600080fd5b506102f0611450565b34801561050657600080fd5b506102f0610515366004612c6b565b6114e2565b34801561052657600080fd5b506102f0610535366004612c50565b611518565b34801561054657600080fd5b50610437610555366004612b09565b611577565b34801561056657600080fd5b50610312610575366004612b09565b60009081526006602052604090205460ff1690565b34801561059657600080fd5b50600a546001600160a01b0316610369565b3480156105b457600080fd5b506102f06105c3366004612c6b565b6115ce565b3480156105d457600080fd5b5061033c611624565b3480156105e957600080fd5b506102f06105f8366004612caf565b611633565b34801561060957600080fd5b506010546001600160a01b0316610369565b34801561062757600080fd5b506102f0610636366004612cfc565b611642565b34801561064757600080fd5b50610312610656366004612b09565b611674565b34801561066757600080fd5b506103ed610676366004612dd8565b63bc197c8160e01b98975050505050505050565b34801561069657600080fd5b506102f06106a5366004612a22565b6116a3565b3480156106b657600080fd5b506102f06106c5366004612a22565b611ab6565b3480156106d657600080fd5b5061033c6106e5366004612b09565b611c5b565b3480156106f657600080fd5b50600b54600160a01b900460ff16610312565b34801561071557600080fd5b50610312610724366004612e93565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561075e57600080fd5b506102f061076d366004612a22565b611c92565b34801561077e57600080fd5b506103ed61078d366004612ec6565b63f23a6e6160e01b9695505050505050565b3480156107ab57600080fd5b506102f06107ba366004612c50565b611edd565b3480156107cb57600080fd5b506102f06107da366004612a22565b611f53565b600260095414156108025760405162461bcd60e51b81526004016102bf90612f3e565b6002600955600054600160a01b900460ff16156108315760405162461bcd60e51b81526004016102bf90612f75565b8060028110156108925760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564206174206c656173742074776f20646f6f676769657320746044820152651bc81b5a5b9d60d21b60648201526084016102bf565b60008060005b83811015610a4557600660008787848181106108b6576108b6612fa1565b602090810292909201358352508101919091526040016000205460ff161561092c5760405162461bcd60e51b815260206004820152602360248201527f427275682e2e2074686973204e46542063616e206f6e6c79206d696e74206f6e60448201526231b29760e91b60648201526084016102bf565b6003600087878481811061094257610942612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146109835760405162461bcd60e51b81526004016102bf90612fb7565b624f1a006005600088888581811061099d5761099d612fa1565b90506020020135815260200190815260200160002054420310610a3d576001600660008888858181106109d2576109d2612fa1565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060018201915060028260ff1610610a1a57600091506001830192505b610a3d3033888885818110610a3157610a31612fa1565b905060200201356112e9565b600101610898565b5060008211610a965760405162461bcd60e51b815260206004820152601960248201527f4e65656420746f206861766520736f6d6520746f206d696e740000000000000060448201526064016102bf565b6010546040516394bf804d60e01b8152600481018490523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b5050600160095550505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610b3757506001600160e01b03198216635b5e139f60e01b145b80610b5257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610b6790612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612fee565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b506000908152600760205260409020546001600160a01b031690565b6000610c8a82611304565b9050806001600160a01b0316836001600160a01b03161415610cf85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102bf565b336001600160a01b0382161480610d145750610d148133610724565b610d865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102bf565b610d9083836121d0565b505050565b600b54600160a01b900460ff1615610de85760405162461bcd60e51b8152602060048201526016602482015275165bdd4818d85b881b9bc81b1bdb99d95c881b5a5b9d60521b60448201526064016102bf565b600b546001600160a01b03163314610e125760405162461bcd60e51b81526004016102bf90613029565b8080610e305760405162461bcd60e51b81526004016102bf90613058565b3060009081526004602052604081208054839290610e4f90849061309b565b9091555083905082600081610e6657610e66612fa1565b90506020020135306001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600c80548201905560005b81811015610fa0576000600381868685818110610ed757610ed7612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f3d5760405162461bcd60e51b8152602060048201526013602482015272596f752063616e74206d696e7420747769636560681b60448201526064016102bf565b3060036000868685818110610f5457610f54612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080610f98906130b3565b915050610eb8565b50505050565b600b546001600160a01b03163314610fd05760405162461bcd60e51b81526004016102bf90613029565b6301e13380600d5442610fe391906130ce565b1015610fee57600080fd5b6010546040516394bf804d60e01b8152600481018390523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50505050611387601060009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906130e5565b11156110e6576000805460ff60a01b1916600160a01b1790555b50565b6110f3338261223e565b61110f5760405162461bcd60e51b81526004016102bf906130fe565b610d90838383612348565b6002600954141561113d5760405162461bcd60e51b81526004016102bf90612f3e565b60026009558061115f5760405162461bcd60e51b81526004016102bf90613058565b8060005b818110156112de576003600085858481811061118157611181612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146111c25760405162461bcd60e51b81526004016102bf90612fb7565b600660008585848181106111d8576111d8612fa1565b602090810292909201358352508101919091526040016000205460ff16156112125760405162461bcd60e51b81526004016102bf9061314f565b6005600085858481811061122857611228612fa1565b905060200201358152602001908152602001600020546000141561128e5760405162461bcd60e51b815260206004820152601960248201527f427275682e2e2074686973206973206e6f74207374616b65640000000000000060448201526064016102bf565b6000600560008686858181106112a6576112a6612fa1565b905060200201358152602001908152602001600020819055506112d63033868685818110610a3157610a31612fa1565b600101611163565b505060016009555050565b610d9083838360405180602001604052806000815250611642565b6000818152600360205260408120546001600160a01b03168061137b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102bf565b600054600160a01b900460ff161580156113a2575060008381526005602052604090205415155b80156113bd575060008381526006602052604090205460ff16155b15610b5257503092915050565b60006001600160a01b0382166114345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016102bf565b506001600160a01b031660009081526004602052604090205490565b600b546001600160a01b0316331461147a5760405162461bcd60e51b81526004016102bf90613029565b600b54600160a01b900460ff16156114cd5760405162461bcd60e51b8152602060048201526016602482015275135a5b9d081a5cc8185b1c9958591e481b1bd8dad95960521b60448201526064016102bf565b600b805460ff60a01b1916600160a01b179055565b600b546001600160a01b0316331461150c5760405162461bcd60e51b81526004016102bf90613029565b610d90600f838361293d565b600b546001600160a01b031633146115425760405162461bcd60e51b81526004016102bf90613029565b6001600160a01b03811661155557600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260056020526040812054624f1a009061159590426130ce565b10156115c1576000828152600560205260409020546115b490426130ce565b610b5290624f1a006130ce565b506000919050565b919050565b600b546001600160a01b031633146116185760405162461bcd60e51b815260206004820152600d60248201526c0a6e8cae040decccc40c4e4c2d609b1b60448201526064016102bf565b610d90600e838361293d565b606060028054610b6790612fee565b61163e338383612591565b5050565b61164c338361223e565b6116685760405162461bcd60e51b81526004016102bf906130fe565b610fa084848484612660565b60008181526005602052604081205415801590610b5257505060009081526006602052604090205460ff161590565b600260095414156116c65760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190613192565b61177d5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b8061179a5760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff16156117c45760405162461bcd60e51b81526004016102bf90612f75565b8060008167ffffffffffffffff8111156117e0576117e0612ce6565b604051908082528060200260200182016040528015611809578160200160208202803683370190505b50905060005b8281101561183e57600182828151811061182b5761182b612fa1565b602090810291909101015260010161180f565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d69061187790339030908990899088906004016131af565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b5050505060005b82811015611aaa57600560008686848181106118ca576118ca612fa1565b905060200201358152602001908152602001600020546000146119285760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b61194985858381811061193d5761193d612fa1565b90506020020135611304565b6001600160a01b0316306001600160a01b0316146119795760405162461bcd60e51b81526004016102bf90613263565b6006600086868481811061198f5761198f612fa1565b602090810292909201358352508101919091526040016000205460ff16156119c95760405162461bcd60e51b81526004016102bf9061314f565b33600360008787858181106119e0576119e0612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260056000878785818110611a3057611a30612fa1565b90506020020135815260200190815260200160002081905550848482818110611a5b57611a5b612fa1565b90506020020135306001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46001016118ac565b50506001600955505050565b60026009541415611ad95760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611afb5760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611b1757611b17612ce6565b604051908082528060200260200182016040528015611b40578160200160208202803683370190505b50905060005b82811015611bb257611b6385858381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b031614611b935760405162461bcd60e51b81526004016102bf90612fb7565b611baa3330878785818110610a3157610a31612fa1565b600101611b46565b5060005b82811015611be5576001828281518110611bd257611bd2612fa1565b6020908102919091010152600101611bb6565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611c1e90309033908990899088906004016131af565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50506001600955505050505050565b6060600e611c6883612693565b600f604051602001611c7c93929190613334565b6040516020818303038152906040529050919050565b60026009541415611cb55760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190613192565b611d6c5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b80611d895760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611da557611da5612ce6565b604051908082528060200260200182016040528015611dce578160200160208202803683370190505b50905060005b82811015611e03576001828281518110611df057611df0612fa1565b6020908102919091010152600101611dd4565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611e3c90339030908990899088906004016131af565b600060405180830381600087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b5050505060005b82811015611aaa57611e8e85858381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b031614611ebe5760405162461bcd60e51b81526004016102bf90613263565b611ed53033878785818110610a3157610a31612fa1565b600101611e71565b611ee5612791565b6001600160a01b038116611f4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102bf565b6110e6816127ed565b60026009541415611f765760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611f985760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff1615611fc25760405162461bcd60e51b81526004016102bf90612f75565b8060005b8181101561203257611fe384848381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b0316146120135760405162461bcd60e51b81526004016102bf90612fb7565b61202a3330868685818110610a3157610a31612fa1565b600101611fc6565b5060005b818110156112de576005600085858481811061205457612054612fa1565b905060200201358152602001908152602001600020546000146120b25760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b6120c784848381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b0316146120f75760405162461bcd60e51b81526004016102bf90613263565b6006600085858481811061210d5761210d612fa1565b602090810292909201358352508101919091526040016000205460ff16156121475760405162461bcd60e51b81526004016102bf9061314f565b336003600086868581811061215e5761215e612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555042600560008686858181106121ae576121ae612fa1565b6020908102929092013583525081019190915260400160002055600101612036565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061220582611304565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166122b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b60006122c283611304565b9050806001600160a01b0316846001600160a01b0316148061230957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061232d5750836001600160a01b031661232284610bea565b6001600160a01b0316145b8061234057506001600160a01b03811630145b949350505050565b600054600160a01b900460ff166123e2576000818152600560205260409020541580612382575060008181526006602052604090205460ff165b6123e25760405162461bcd60e51b815260206004820152602b60248201527f4e46542043616e742063757272656e746c792062652073656e7420636175736560448201526a081a5d1cc81cdd185ad95960aa1b60648201526084016102bf565b826001600160a01b03166123f582611304565b6001600160a01b0316148061241257506001600160a01b03831630145b61246c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016102bf565b6001600160a01b0382166124ce5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102bf565b6124d96000826121d0565b6001600160a01b03831660009081526004602052604081208054600192906125029084906130ce565b90915550506001600160a01b038216600090815260046020526040812080546001929061253090849061309b565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b031614156125f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102bf565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61266b848484612348565b6126778484848461283f565b610fa05760405162461bcd60e51b81526004016102bf90613367565b6060816126b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126e157806126cb816130b3565b91506126da9050600a836133cf565b91506126bb565b60008167ffffffffffffffff8111156126fc576126fc612ce6565b6040519080825280601f01601f191660200182016040528015612726576020820181803683370190505b5090505b84156123405761273b6001836130ce565b9150612748600a866133e3565b61275390603061309b565b60f81b81838151811061276857612768612fa1565b60200101906001600160f81b031916908160001a90535061278a600a866133cf565b945061272a565b600a546001600160a01b031633146127eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bf565b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561293257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128839033908990889088906004016133f7565b6020604051808303816000875af19250505080156128be575060408051601f3d908101601f191682019092526128bb91810190613434565b60015b612918573d8080156128ec576040519150601f19603f3d011682016040523d82523d6000602084013e6128f1565b606091505b5080516129105760405162461bcd60e51b81526004016102bf90613367565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612340565b506001949350505050565b82805461294990612fee565b90600052602060002090601f01602090048101928261296b57600085556129b1565b82601f106129845782800160ff198235161785556129b1565b828001600101855582156129b1579182015b828111156129b1578235825591602001919060010190612996565b506129bd9291506129c1565b5090565b5b808211156129bd57600081556001016129c2565b60008083601f8401126129e857600080fd5b50813567ffffffffffffffff811115612a0057600080fd5b6020830191508360208260051b8501011115612a1b57600080fd5b9250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016129d6565b90969095509350505050565b6001600160e01b0319811681146110e657600080fd5b600060208284031215612a8c57600080fd5b8135612a9781612a64565b9392505050565b60005b83811015612ab9578181015183820152602001612aa1565b83811115610fa05750506000910152565b60008151808452612ae2816020860160208601612a9e565b601f01601f19169290920160200192915050565b602081526000612a976020830184612aca565b600060208284031215612b1b57600080fd5b5035919050565b80356001600160a01b03811681146115c957600080fd5b60008060408385031215612b4c57600080fd5b612b5583612b22565b946020939093013593505050565b60008083601f840112612b7557600080fd5b50813567ffffffffffffffff811115612b8d57600080fd5b602083019150836020828501011115612a1b57600080fd5b600080600080600060808688031215612bbd57600080fd5b612bc686612b22565b9450612bd460208701612b22565b935060408601359250606086013567ffffffffffffffff811115612bf757600080fd5b612c0388828901612b63565b969995985093965092949392505050565b600080600060608486031215612c2957600080fd5b612c3284612b22565b9250612c4060208501612b22565b9150604084013590509250925092565b600060208284031215612c6257600080fd5b612a9782612b22565b60008060208385031215612c7e57600080fd5b823567ffffffffffffffff811115612c9557600080fd5b612a5885828601612b63565b80151581146110e657600080fd5b60008060408385031215612cc257600080fd5b612ccb83612b22565b91506020830135612cdb81612ca1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d1257600080fd5b612d1b85612b22565b9350612d2960208601612b22565b925060408501359150606085013567ffffffffffffffff80821115612d4d57600080fd5b818701915087601f830112612d6157600080fd5b813581811115612d7357612d73612ce6565b604051601f8201601f19908116603f01168101908382118183101715612d9b57612d9b612ce6565b816040528281528a6020848701011115612db457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060008060008060008060a0898b031215612df457600080fd5b612dfd89612b22565b9750612e0b60208a01612b22565b9650604089013567ffffffffffffffff80821115612e2857600080fd5b612e348c838d016129d6565b909850965060608b0135915080821115612e4d57600080fd5b612e598c838d016129d6565b909650945060808b0135915080821115612e7257600080fd5b50612e7f8b828c01612b63565b999c989b5096995094979396929594505050565b60008060408385031215612ea657600080fd5b612eaf83612b22565b9150612ebd60208401612b22565b90509250929050565b60008060008060008060a08789031215612edf57600080fd5b612ee887612b22565b9550612ef660208801612b22565b94506040870135935060608701359250608087013567ffffffffffffffff811115612f2057600080fd5b612f2c89828a01612b63565b979a9699509497509295939492505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260129082015271105b1c9958591e481b5a5b9d1959081bdd5d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f427275682e2e20796f7520646f6e74206f776e20746861740000000000000000604082015260600190565b600181811c9082168061300257607f821691505b6020821081141561302357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b6020808252601390820152724d757374206861766520736f6d657468696e6760681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130ae576130ae613085565b500190565b60006000198214156130c7576130c7613085565b5060010190565b6000828210156130e0576130e0613085565b500390565b6000602082840312156130f757600080fd5b5051919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526023908201527f427275682e2e2074686973204e46542063616e206f6e6c79207374616b65206f6040820152626e636560e81b606082015260800190565b6000602082840312156131a457600080fd5b8151612a9781612ca1565b6001600160a01b03868116825285811660208084019190915260a0604084018190528301859052600091906001600160fb1b038611156131ee57600080fd5b8560051b9150818760c0860137600091840160c08181018481528683039091016060870152865190819052828701939160e001905b808310156132435784518252938301936001929092019190830190613223565b50858103608087015260008152602081019b9a5050505050505050505050565b60208082526017908201527f427275682e2e20776520646f6e74206f776e2074686174000000000000000000604082015260600190565b8054600090600181811c90808316806132b457607f831692505b60208084108214156132d657634e487b7160e01b600052602260045260246000fd5b8180156132ea57600181146132fb57613328565b60ff19861689528489019650613328565b60008881526020902060005b868110156133205781548b820152908501908301613307565b505084890196505b50505050505092915050565b6000613340828661329a565b8451613350818360208901612a9e565b61335c8183018661329a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133de576133de6133b9565b500490565b6000826133f2576133f26133b9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342a90830184612aca565b9695505050505050565b60006020828403121561344657600080fd5b8151612a9781612a6456fea264697066735822122067d00aaeffd93c000a5672aba6960bd2550f7b6c31e6cc840047eb000c8be9cf64736f6c634300080a00336009805461ffff60a01b1916600160a81b17905560e0604052603560808181529062001ca760a03980516200003d91600a9160209091019062000184565b506040805160208101918290526000908190526200005e91600b9162000184565b503480156200006c57600080fd5b5060405162001cdc38038062001cdc8339810160408190526200008f9162000247565b604080518082018252600d8082526c446f6f6767696573536e61636b60981b602080840182815285518087019096529285528401528151919291620000d79160019162000184565b508051620000ed90600290602084019062000184565b5050600160005550620001003362000132565b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055620002bc565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000192906200027f565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b80516001600160a01b03811681146200024257600080fd5b919050565b600080604083850312156200025b57600080fd5b62000266836200022a565b915062000276602084016200022a565b90509250929050565b600181811c908216806200029457607f821691505b60208210811415620002b657634e487b7160e01b600052602260045260246000fd5b50919050565b6119db80620002cc6000396000f3fe6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033697066733a2f2f516d55744b48626954684c3546696b55755567764c72483748644e7a51394b6d665574447345366f3368554b5470697066733a2f2f516d53525076623445346f54384a3733516f574779766446697a577a704d6b6b536f7a416e43454d6a54354b37472f000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638b4ca17811610118578063bfd97f7f116100a0578063e985e9c51161006f578063e985e9c514610709578063ef7441a414610752578063f23a6e6114610772578063f2fde38b1461079f578063fe939afc146107bf57600080fd5b8063bfd97f7f1461068a578063c1dcd138146106aa578063c87b56dd146106ca578063df10580a146106ea57600080fd5b8063a22cb465116100e7578063a22cb465146105dd578063b81ec87d146105fd578063b88d4fde1461061b578063baa51f861461063b578063bc197c811461065b57600080fd5b80638b4ca1781461055a5780638da5cb5b1461058a57806393ee670c146105a857806395d89b41146105c857600080fd5b806323b872dd1161019b57806370a082311161016a57806370a08231146104c55780637b32b19c146104e55780637e2285aa146104fa578063880cdc311461051a578063884e07411461053a57600080fd5b806323b872dd146104455780633afd48611461046557806342842e0e146104855780636352211e146104a557600080fd5b8063095ea7b3116101e2578063095ea7b3146103815780630ea2d79e146103a1578063150b7a02146103c15780631782ba911461040657806318160ddd1461042657600080fd5b806301b7bb75146102d057806301ffc9a7146102f257806306fdde0314610327578063081812fc1461034957600080fd5b366102cb57600061022c600a546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610276576040519150601f19603f3d011682016040523d82523d6000602084013e61027b565b606091505b50509050806102c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156102dc57600080fd5b506102f06102eb366004612a22565b6107df565b005b3480156102fe57600080fd5b5061031261030d366004612a7a565b610b06565b60405190151581526020015b60405180910390f35b34801561033357600080fd5b5061033c610b58565b60405161031e9190612af6565b34801561035557600080fd5b50610369610364366004612b09565b610bea565b6040516001600160a01b03909116815260200161031e565b34801561038d57600080fd5b506102f061039c366004612b39565b610c7f565b3480156103ad57600080fd5b506102f06103bc366004612a22565b610d95565b3480156103cd57600080fd5b506103ed6103dc366004612ba5565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161031e565b34801561041257600080fd5b506102f0610421366004612b09565b610fa6565b34801561043257600080fd5b50600c545b60405190815260200161031e565b34801561045157600080fd5b506102f0610460366004612c14565b6110e9565b34801561047157600080fd5b506102f0610480366004612a22565b61111a565b34801561049157600080fd5b506102f06104a0366004612c14565b6112e9565b3480156104b157600080fd5b506103696104c0366004612b09565b611304565b3480156104d157600080fd5b506104376104e0366004612c50565b6113ca565b3480156104f157600080fd5b506102f0611450565b34801561050657600080fd5b506102f0610515366004612c6b565b6114e2565b34801561052657600080fd5b506102f0610535366004612c50565b611518565b34801561054657600080fd5b50610437610555366004612b09565b611577565b34801561056657600080fd5b50610312610575366004612b09565b60009081526006602052604090205460ff1690565b34801561059657600080fd5b50600a546001600160a01b0316610369565b3480156105b457600080fd5b506102f06105c3366004612c6b565b6115ce565b3480156105d457600080fd5b5061033c611624565b3480156105e957600080fd5b506102f06105f8366004612caf565b611633565b34801561060957600080fd5b506010546001600160a01b0316610369565b34801561062757600080fd5b506102f0610636366004612cfc565b611642565b34801561064757600080fd5b50610312610656366004612b09565b611674565b34801561066757600080fd5b506103ed610676366004612dd8565b63bc197c8160e01b98975050505050505050565b34801561069657600080fd5b506102f06106a5366004612a22565b6116a3565b3480156106b657600080fd5b506102f06106c5366004612a22565b611ab6565b3480156106d657600080fd5b5061033c6106e5366004612b09565b611c5b565b3480156106f657600080fd5b50600b54600160a01b900460ff16610312565b34801561071557600080fd5b50610312610724366004612e93565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561075e57600080fd5b506102f061076d366004612a22565b611c92565b34801561077e57600080fd5b506103ed61078d366004612ec6565b63f23a6e6160e01b9695505050505050565b3480156107ab57600080fd5b506102f06107ba366004612c50565b611edd565b3480156107cb57600080fd5b506102f06107da366004612a22565b611f53565b600260095414156108025760405162461bcd60e51b81526004016102bf90612f3e565b6002600955600054600160a01b900460ff16156108315760405162461bcd60e51b81526004016102bf90612f75565b8060028110156108925760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564206174206c656173742074776f20646f6f676769657320746044820152651bc81b5a5b9d60d21b60648201526084016102bf565b60008060005b83811015610a4557600660008787848181106108b6576108b6612fa1565b602090810292909201358352508101919091526040016000205460ff161561092c5760405162461bcd60e51b815260206004820152602360248201527f427275682e2e2074686973204e46542063616e206f6e6c79206d696e74206f6e60448201526231b29760e91b60648201526084016102bf565b6003600087878481811061094257610942612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146109835760405162461bcd60e51b81526004016102bf90612fb7565b624f1a006005600088888581811061099d5761099d612fa1565b90506020020135815260200190815260200160002054420310610a3d576001600660008888858181106109d2576109d2612fa1565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060018201915060028260ff1610610a1a57600091506001830192505b610a3d3033888885818110610a3157610a31612fa1565b905060200201356112e9565b600101610898565b5060008211610a965760405162461bcd60e51b815260206004820152601960248201527f4e65656420746f206861766520736f6d6520746f206d696e740000000000000060448201526064016102bf565b6010546040516394bf804d60e01b8152600481018490523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b5050600160095550505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610b3757506001600160e01b03198216635b5e139f60e01b145b80610b5257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610b6790612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612fee565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b506000908152600760205260409020546001600160a01b031690565b6000610c8a82611304565b9050806001600160a01b0316836001600160a01b03161415610cf85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102bf565b336001600160a01b0382161480610d145750610d148133610724565b610d865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102bf565b610d9083836121d0565b505050565b600b54600160a01b900460ff1615610de85760405162461bcd60e51b8152602060048201526016602482015275165bdd4818d85b881b9bc81b1bdb99d95c881b5a5b9d60521b60448201526064016102bf565b600b546001600160a01b03163314610e125760405162461bcd60e51b81526004016102bf90613029565b8080610e305760405162461bcd60e51b81526004016102bf90613058565b3060009081526004602052604081208054839290610e4f90849061309b565b9091555083905082600081610e6657610e66612fa1565b90506020020135306001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600c80548201905560005b81811015610fa0576000600381868685818110610ed757610ed7612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f3d5760405162461bcd60e51b8152602060048201526013602482015272596f752063616e74206d696e7420747769636560681b60448201526064016102bf565b3060036000868685818110610f5457610f54612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080610f98906130b3565b915050610eb8565b50505050565b600b546001600160a01b03163314610fd05760405162461bcd60e51b81526004016102bf90613029565b6301e13380600d5442610fe391906130ce565b1015610fee57600080fd5b6010546040516394bf804d60e01b8152600481018390523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50505050611387601060009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906130e5565b11156110e6576000805460ff60a01b1916600160a01b1790555b50565b6110f3338261223e565b61110f5760405162461bcd60e51b81526004016102bf906130fe565b610d90838383612348565b6002600954141561113d5760405162461bcd60e51b81526004016102bf90612f3e565b60026009558061115f5760405162461bcd60e51b81526004016102bf90613058565b8060005b818110156112de576003600085858481811061118157611181612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146111c25760405162461bcd60e51b81526004016102bf90612fb7565b600660008585848181106111d8576111d8612fa1565b602090810292909201358352508101919091526040016000205460ff16156112125760405162461bcd60e51b81526004016102bf9061314f565b6005600085858481811061122857611228612fa1565b905060200201358152602001908152602001600020546000141561128e5760405162461bcd60e51b815260206004820152601960248201527f427275682e2e2074686973206973206e6f74207374616b65640000000000000060448201526064016102bf565b6000600560008686858181106112a6576112a6612fa1565b905060200201358152602001908152602001600020819055506112d63033868685818110610a3157610a31612fa1565b600101611163565b505060016009555050565b610d9083838360405180602001604052806000815250611642565b6000818152600360205260408120546001600160a01b03168061137b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102bf565b600054600160a01b900460ff161580156113a2575060008381526005602052604090205415155b80156113bd575060008381526006602052604090205460ff16155b15610b5257503092915050565b60006001600160a01b0382166114345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016102bf565b506001600160a01b031660009081526004602052604090205490565b600b546001600160a01b0316331461147a5760405162461bcd60e51b81526004016102bf90613029565b600b54600160a01b900460ff16156114cd5760405162461bcd60e51b8152602060048201526016602482015275135a5b9d081a5cc8185b1c9958591e481b1bd8dad95960521b60448201526064016102bf565b600b805460ff60a01b1916600160a01b179055565b600b546001600160a01b0316331461150c5760405162461bcd60e51b81526004016102bf90613029565b610d90600f838361293d565b600b546001600160a01b031633146115425760405162461bcd60e51b81526004016102bf90613029565b6001600160a01b03811661155557600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260056020526040812054624f1a009061159590426130ce565b10156115c1576000828152600560205260409020546115b490426130ce565b610b5290624f1a006130ce565b506000919050565b919050565b600b546001600160a01b031633146116185760405162461bcd60e51b815260206004820152600d60248201526c0a6e8cae040decccc40c4e4c2d609b1b60448201526064016102bf565b610d90600e838361293d565b606060028054610b6790612fee565b61163e338383612591565b5050565b61164c338361223e565b6116685760405162461bcd60e51b81526004016102bf906130fe565b610fa084848484612660565b60008181526005602052604081205415801590610b5257505060009081526006602052604090205460ff161590565b600260095414156116c65760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190613192565b61177d5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b8061179a5760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff16156117c45760405162461bcd60e51b81526004016102bf90612f75565b8060008167ffffffffffffffff8111156117e0576117e0612ce6565b604051908082528060200260200182016040528015611809578160200160208202803683370190505b50905060005b8281101561183e57600182828151811061182b5761182b612fa1565b602090810291909101015260010161180f565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d69061187790339030908990899088906004016131af565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b5050505060005b82811015611aaa57600560008686848181106118ca576118ca612fa1565b905060200201358152602001908152602001600020546000146119285760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b61194985858381811061193d5761193d612fa1565b90506020020135611304565b6001600160a01b0316306001600160a01b0316146119795760405162461bcd60e51b81526004016102bf90613263565b6006600086868481811061198f5761198f612fa1565b602090810292909201358352508101919091526040016000205460ff16156119c95760405162461bcd60e51b81526004016102bf9061314f565b33600360008787858181106119e0576119e0612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260056000878785818110611a3057611a30612fa1565b90506020020135815260200190815260200160002081905550848482818110611a5b57611a5b612fa1565b90506020020135306001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46001016118ac565b50506001600955505050565b60026009541415611ad95760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611afb5760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611b1757611b17612ce6565b604051908082528060200260200182016040528015611b40578160200160208202803683370190505b50905060005b82811015611bb257611b6385858381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b031614611b935760405162461bcd60e51b81526004016102bf90612fb7565b611baa3330878785818110610a3157610a31612fa1565b600101611b46565b5060005b82811015611be5576001828281518110611bd257611bd2612fa1565b6020908102919091010152600101611bb6565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611c1e90309033908990899088906004016131af565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50506001600955505050505050565b6060600e611c6883612693565b600f604051602001611c7c93929190613334565b6040516020818303038152906040529050919050565b60026009541415611cb55760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190613192565b611d6c5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b80611d895760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611da557611da5612ce6565b604051908082528060200260200182016040528015611dce578160200160208202803683370190505b50905060005b82811015611e03576001828281518110611df057611df0612fa1565b6020908102919091010152600101611dd4565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611e3c90339030908990899088906004016131af565b600060405180830381600087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b5050505060005b82811015611aaa57611e8e85858381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b031614611ebe5760405162461bcd60e51b81526004016102bf90613263565b611ed53033878785818110610a3157610a31612fa1565b600101611e71565b611ee5612791565b6001600160a01b038116611f4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102bf565b6110e6816127ed565b60026009541415611f765760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611f985760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff1615611fc25760405162461bcd60e51b81526004016102bf90612f75565b8060005b8181101561203257611fe384848381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b0316146120135760405162461bcd60e51b81526004016102bf90612fb7565b61202a3330868685818110610a3157610a31612fa1565b600101611fc6565b5060005b818110156112de576005600085858481811061205457612054612fa1565b905060200201358152602001908152602001600020546000146120b25760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b6120c784848381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b0316146120f75760405162461bcd60e51b81526004016102bf90613263565b6006600085858481811061210d5761210d612fa1565b602090810292909201358352508101919091526040016000205460ff16156121475760405162461bcd60e51b81526004016102bf9061314f565b336003600086868581811061215e5761215e612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555042600560008686858181106121ae576121ae612fa1565b6020908102929092013583525081019190915260400160002055600101612036565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061220582611304565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166122b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b60006122c283611304565b9050806001600160a01b0316846001600160a01b0316148061230957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061232d5750836001600160a01b031661232284610bea565b6001600160a01b0316145b8061234057506001600160a01b03811630145b949350505050565b600054600160a01b900460ff166123e2576000818152600560205260409020541580612382575060008181526006602052604090205460ff165b6123e25760405162461bcd60e51b815260206004820152602b60248201527f4e46542043616e742063757272656e746c792062652073656e7420636175736560448201526a081a5d1cc81cdd185ad95960aa1b60648201526084016102bf565b826001600160a01b03166123f582611304565b6001600160a01b0316148061241257506001600160a01b03831630145b61246c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016102bf565b6001600160a01b0382166124ce5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102bf565b6124d96000826121d0565b6001600160a01b03831660009081526004602052604081208054600192906125029084906130ce565b90915550506001600160a01b038216600090815260046020526040812080546001929061253090849061309b565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b031614156125f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102bf565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61266b848484612348565b6126778484848461283f565b610fa05760405162461bcd60e51b81526004016102bf90613367565b6060816126b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126e157806126cb816130b3565b91506126da9050600a836133cf565b91506126bb565b60008167ffffffffffffffff8111156126fc576126fc612ce6565b6040519080825280601f01601f191660200182016040528015612726576020820181803683370190505b5090505b84156123405761273b6001836130ce565b9150612748600a866133e3565b61275390603061309b565b60f81b81838151811061276857612768612fa1565b60200101906001600160f81b031916908160001a90535061278a600a866133cf565b945061272a565b600a546001600160a01b031633146127eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bf565b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561293257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128839033908990889088906004016133f7565b6020604051808303816000875af19250505080156128be575060408051601f3d908101601f191682019092526128bb91810190613434565b60015b612918573d8080156128ec576040519150601f19603f3d011682016040523d82523d6000602084013e6128f1565b606091505b5080516129105760405162461bcd60e51b81526004016102bf90613367565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612340565b506001949350505050565b82805461294990612fee565b90600052602060002090601f01602090048101928261296b57600085556129b1565b82601f106129845782800160ff198235161785556129b1565b828001600101855582156129b1579182015b828111156129b1578235825591602001919060010190612996565b506129bd9291506129c1565b5090565b5b808211156129bd57600081556001016129c2565b60008083601f8401126129e857600080fd5b50813567ffffffffffffffff811115612a0057600080fd5b6020830191508360208260051b8501011115612a1b57600080fd5b9250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016129d6565b90969095509350505050565b6001600160e01b0319811681146110e657600080fd5b600060208284031215612a8c57600080fd5b8135612a9781612a64565b9392505050565b60005b83811015612ab9578181015183820152602001612aa1565b83811115610fa05750506000910152565b60008151808452612ae2816020860160208601612a9e565b601f01601f19169290920160200192915050565b602081526000612a976020830184612aca565b600060208284031215612b1b57600080fd5b5035919050565b80356001600160a01b03811681146115c957600080fd5b60008060408385031215612b4c57600080fd5b612b5583612b22565b946020939093013593505050565b60008083601f840112612b7557600080fd5b50813567ffffffffffffffff811115612b8d57600080fd5b602083019150836020828501011115612a1b57600080fd5b600080600080600060808688031215612bbd57600080fd5b612bc686612b22565b9450612bd460208701612b22565b935060408601359250606086013567ffffffffffffffff811115612bf757600080fd5b612c0388828901612b63565b969995985093965092949392505050565b600080600060608486031215612c2957600080fd5b612c3284612b22565b9250612c4060208501612b22565b9150604084013590509250925092565b600060208284031215612c6257600080fd5b612a9782612b22565b60008060208385031215612c7e57600080fd5b823567ffffffffffffffff811115612c9557600080fd5b612a5885828601612b63565b80151581146110e657600080fd5b60008060408385031215612cc257600080fd5b612ccb83612b22565b91506020830135612cdb81612ca1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d1257600080fd5b612d1b85612b22565b9350612d2960208601612b22565b925060408501359150606085013567ffffffffffffffff80821115612d4d57600080fd5b818701915087601f830112612d6157600080fd5b813581811115612d7357612d73612ce6565b604051601f8201601f19908116603f01168101908382118183101715612d9b57612d9b612ce6565b816040528281528a6020848701011115612db457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060008060008060008060a0898b031215612df457600080fd5b612dfd89612b22565b9750612e0b60208a01612b22565b9650604089013567ffffffffffffffff80821115612e2857600080fd5b612e348c838d016129d6565b909850965060608b0135915080821115612e4d57600080fd5b612e598c838d016129d6565b909650945060808b0135915080821115612e7257600080fd5b50612e7f8b828c01612b63565b999c989b5096995094979396929594505050565b60008060408385031215612ea657600080fd5b612eaf83612b22565b9150612ebd60208401612b22565b90509250929050565b60008060008060008060a08789031215612edf57600080fd5b612ee887612b22565b9550612ef660208801612b22565b94506040870135935060608701359250608087013567ffffffffffffffff811115612f2057600080fd5b612f2c89828a01612b63565b979a9699509497509295939492505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260129082015271105b1c9958591e481b5a5b9d1959081bdd5d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f427275682e2e20796f7520646f6e74206f776e20746861740000000000000000604082015260600190565b600181811c9082168061300257607f821691505b6020821081141561302357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b6020808252601390820152724d757374206861766520736f6d657468696e6760681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130ae576130ae613085565b500190565b60006000198214156130c7576130c7613085565b5060010190565b6000828210156130e0576130e0613085565b500390565b6000602082840312156130f757600080fd5b5051919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526023908201527f427275682e2e2074686973204e46542063616e206f6e6c79207374616b65206f6040820152626e636560e81b606082015260800190565b6000602082840312156131a457600080fd5b8151612a9781612ca1565b6001600160a01b03868116825285811660208084019190915260a0604084018190528301859052600091906001600160fb1b038611156131ee57600080fd5b8560051b9150818760c0860137600091840160c08181018481528683039091016060870152865190819052828701939160e001905b808310156132435784518252938301936001929092019190830190613223565b50858103608087015260008152602081019b9a5050505050505050505050565b60208082526017908201527f427275682e2e20776520646f6e74206f776e2074686174000000000000000000604082015260600190565b8054600090600181811c90808316806132b457607f831692505b60208084108214156132d657634e487b7160e01b600052602260045260246000fd5b8180156132ea57600181146132fb57613328565b60ff19861689528489019650613328565b60008881526020902060005b868110156133205781548b820152908501908301613307565b505084890196505b50505050505092915050565b6000613340828661329a565b8451613350818360208901612a9e565b61335c8183018661329a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133de576133de6133b9565b500490565b6000826133f2576133f26133b9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342a90830184612aca565b9695505050505050565b60006020828403121561344657600080fd5b8151612a9781612a6456fea264697066735822122067d00aaeffd93c000a5672aba6960bd2550f7b6c31e6cc840047eb000c8be9cf64736f6c634300080a0033

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

000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e

-----Decoded View---------------
Arg [0] : dooggiesContract (address): 0x495f947276749Ce646f68AC8c248420045cb7b5e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e


Deployed Bytecode Sourcemap

29827:10766:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30751:9;30774:7;6169:6;;-1:-1:-1;;;;;6169:6:0;;6096:87;30774:7;-1:-1:-1;;;;;30766:21:0;30795:9;30766:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30750:59;;;30828:4;30820:37;;;;-1:-1:-1;;;30820:37:0;;568:2:1;30820:37:0;;;550:21:1;607:2;587:18;;;580:30;-1:-1:-1;;;626:18:1;;;619:50;686:18;;30820:37:0;;;;;;;;;30739:126;29827:10766;;;;;35539:1200;;;;;;;;;;-1:-1:-1;35539:1200:0;;;;;:::i;:::-;;:::i;:::-;;10021:305;;;;;;;;;;-1:-1:-1;10021:305:0;;;;;:::i;:::-;;:::i;:::-;;;2080:14:1;;2073:22;2055:41;;2043:2;2028:18;10021:305:0;;;;;;;;10959:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12050:221::-;;;;;;;;;;-1:-1:-1;12050:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3207:32:1;;;3189:51;;3177:2;3162:18;12050:221:0;3043:203:1;11629:413:0;;;;;;;;;;-1:-1:-1;11629:413:0;;;;;:::i;:::-;;:::i;37462:749::-;;;;;;;;;;-1:-1:-1;37462:749:0;;;;;:::i;:::-;;:::i;38585:167::-;;;;;;;;;;-1:-1:-1;38585:167:0;;;;;:::i;:::-;-1:-1:-1;;;38585:167:0;;;;;;;;;;;-1:-1:-1;;;;;;4833:33:1;;;4815:52;;4803:2;4788:18;38585:167:0;4671:202:1;36747:490:0;;;;;;;;;;-1:-1:-1;36747:490:0;;;;;:::i;:::-;;:::i;39697:92::-;;;;;;;;;;-1:-1:-1;39770:11:0;;39697:92;;;5024:25:1;;;5012:2;4997:18;39697:92:0;4878:177:1;12616:286:0;;;;;;;;;;-1:-1:-1;12616:286:0;;;;;:::i;:::-;;:::i;34834:697::-;;;;;;;;;;-1:-1:-1;34834:697:0;;;;;:::i;:::-;;:::i;12910:185::-;;;;;;;;;;-1:-1:-1;12910:185:0;;;;;:::i;:::-;;:::i;10551:400::-;;;;;;;;;;-1:-1:-1;10551:400:0;;;;;:::i;:::-;;:::i;10334:209::-;;;;;;;;;;-1:-1:-1;10334:209:0;;;;;:::i;:::-;;:::i;37245:::-;;;;;;;;;;;;;:::i;38416:161::-;;;;;;;;;;-1:-1:-1;38416:161:0;;;;;:::i;:::-;;:::i;38219:189::-;;;;;;;;;;-1:-1:-1;38219:189:0;;;;;:::i;:::-;;:::i;39910:276::-;;;;;;;;;;-1:-1:-1;39910:276:0;;;;;:::i;:::-;;:::i;40194:125::-;;;;;;;;;;-1:-1:-1;40194:125:0;;;;;:::i;:::-;40256:4;40280:31;;;:22;:31;;;;;;;;;40194:125;6096:87;;;;;;;;;;-1:-1:-1;6169:6:0;;-1:-1:-1;;;;;6169:6:0;6096:87;;39527:162;;;;;;;;;;-1:-1:-1;39527:162:0;;;;;:::i;:::-;;:::i;11069:106::-;;;;;;;;;;;;;:::i;12279:157::-;;;;;;;;;;-1:-1:-1;12279:157:0;;;;;:::i;:::-;;:::i;39797:105::-;;;;;;;;;;-1:-1:-1;39880:13:0;;-1:-1:-1;;;;;39880:13:0;39797:105;;13103:328;;;;;;;;;;-1:-1:-1;13103:328:0;;;;;:::i;:::-;;:::i;40327:161::-;;;;;;;;;;-1:-1:-1;40327:161:0;;;;;:::i;:::-;;:::i;38999:263::-;;;;;;;;;;-1:-1:-1;38999:263:0;;;;;:::i;:::-;-1:-1:-1;;;38999:263:0;;;;;;;;;;;32377:1466;;;;;;;;;;-1:-1:-1;32377:1466:0;;;;;:::i;:::-;;:::i;31691:678::-;;;;;;;;;;-1:-1:-1;31691:678:0;;;;;:::i;:::-;;:::i;39270:249::-;;;;;;;;;;-1:-1:-1;39270:249:0;;;;;:::i;:::-;;:::i;40496:94::-;;;;;;;;;;-1:-1:-1;40567:15:0;;-1:-1:-1;;;40567:15:0;;;;40496:94;;12444:164;;;;;;;;;;-1:-1:-1;12444:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12565:25:0;;;12541:4;12565:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12444:164;30873:810;;;;;;;;;;-1:-1:-1;30873:810:0;;;;;:::i;:::-;;:::i;38760:231::-;;;;;;;;;;-1:-1:-1;38760:231:0;;;;;:::i;:::-;-1:-1:-1;;;38760:231:0;;;;;;;;;6331:201;;;;;;;;;;-1:-1:-1;6331:201:0;;;;;:::i;:::-;;:::i;33851:975::-;;;;;;;;;;-1:-1:-1;33851:975:0;;;;;:::i;:::-;;:::i;35539:1200::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;35627:12:::1;::::0;-1:-1:-1;;;35627:12:0;::::1;;;:21;35619:52;;;;-1:-1:-1::0;;;35619:52:0::1;;;;;;;:::i;:::-;35720:8:::0;35767:1:::1;35758:10:::0;::::1;;35750:61;;;::::0;-1:-1:-1;;;35750:61:0;;10806:2:1;35750:61:0::1;::::0;::::1;10788:21:1::0;10845:2;10825:18;;;10818:30;10884:34;10864:18;;;10857:62;-1:-1:-1;;;10935:18:1;;;10928:36;10981:19;;35750:61:0::1;10604:402:1::0;35750:61:0::1;35828:17;35864:18:::0;35905:6:::1;35901:690;35921:5;35917:1;:9;35901:690;;;35960:22;:35;35983:8;;35992:1;35983:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35960:35:::0;;-1:-1:-1;35960:35:0;::::1;::::0;;;;;;-1:-1:-1;35960:35:0;;::::1;;:44;35952:92;;;::::0;-1:-1:-1;;;35952:92:0;;11345:2:1;35952:92:0::1;::::0;::::1;11327:21:1::0;11384:2;11364:18;;;11357:30;11423:34;11403:18;;;11396:62;-1:-1:-1;;;11474:18:1;;;11467:33;11517:19;;35952:92:0::1;11143:399:1::0;35952:92:0::1;36085:7;:20;36093:8;;36102:1;36093:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;36085:20:::0;;-1:-1:-1;36085:20:0;::::1;::::0;;;;;;-1:-1:-1;36085:20:0;;-1:-1:-1;;;;;36085:20:0::1;36071:10;:34;36063:71;;;;-1:-1:-1::0;;;36063:71:0::1;;;;;;;:::i;:::-;30075:7;36174:16;:29;36191:8;;36200:1;36191:11;;;;;;;:::i;:::-;;;;;;;36174:29;;;;;;;;;;;;36156:15;:47;:59;36153:423;;36278:4;36240:22;:35;36263:8;;36272:1;36263:11;;;;;;;:::i;:::-;;;;;;;36240:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;36321:1;36305:17;;;;36364:1;36348:12;:17;;;36345:133;;36409:1;36394:16;;36453:1;36437:17;;;;36345:133;36500:56;36525:4;36532:10;36544:8;;36553:1;36544:11;;;;;;;:::i;:::-;;;;;;;36500:16;:56::i;:::-;35928:3;;35901:690;;;;36628:1;36613:12;:16;36605:54;;;::::0;-1:-1:-1;;;36605:54:0;;12102:2:1;36605:54:0::1;::::0;::::1;12084:21:1::0;12141:2;12121:18;;;12114:30;12180:27;12160:18;;;12153:55;12225:18;;36605:54:0::1;11900:349:1::0;36605:54:0::1;36676:13;::::0;:44:::1;::::0;-1:-1:-1;;;36676:44:0;;::::1;::::0;::::1;12428:25:1::0;;;36709:10:0::1;12469:18:1::0;;;12462:60;-1:-1:-1;;;;;36676:13:0;;::::1;::::0;:18:::1;::::0;12401::1;;36676:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;;;;;35539:1200:0:o;10021:305::-;10123:4;-1:-1:-1;;;;;;10160:40:0;;-1:-1:-1;;;10160:40:0;;:105;;-1:-1:-1;;;;;;;10217:48:0;;-1:-1:-1;;;10217:48:0;10160:105;:158;;;-1:-1:-1;;;;;;;;;;9144:40:0;;;10282:36;10140:178;10021:305;-1:-1:-1;;10021:305:0:o;10959:102::-;11015:13;11048:5;11041:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10959:102;:::o;12050:221::-;12126:7;13851:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13851:16:0;12146:73;;;;-1:-1:-1;;;12146:73:0;;13120:2:1;12146:73:0;;;13102:21:1;13159:2;13139:18;;;13132:30;13198:34;13178:18;;;13171:62;-1:-1:-1;;;13249:18:1;;;13242:42;13301:19;;12146:73:0;12918:408:1;12146:73:0;-1:-1:-1;12239:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12239:24:0;;12050:221::o;11629:413::-;11712:13;11728:23;11743:7;11728:14;:23::i;:::-;11712:39;;11776:5;-1:-1:-1;;;;;11770:11:0;:2;-1:-1:-1;;;;;11770:11:0;;;11762:57;;;;-1:-1:-1;;;11762:57:0;;13533:2:1;11762:57:0;;;13515:21:1;13572:2;13552:18;;;13545:30;13611:34;13591:18;;;13584:62;-1:-1:-1;;;13662:18:1;;;13655:31;13703:19;;11762:57:0;13331:397:1;11762:57:0;5758:10;-1:-1:-1;;;;;11854:21:0;;;;:62;;-1:-1:-1;11879:37:0;11896:5;5758:10;12444:164;:::i;11879:37::-;11832:168;;;;-1:-1:-1;;;11832:168:0;;13935:2:1;11832:168:0;;;13917:21:1;13974:2;13954:18;;;13947:30;14013:34;13993:18;;;13986:62;14084:26;14064:18;;;14057:54;14128:19;;11832:168:0;13733:420:1;11832:168:0;12013:21;12022:2;12026:7;12013:8;:21::i;:::-;11701:341;11629:413;;:::o;37462:749::-;37541:15;;-1:-1:-1;;;37541:15:0;;;;:24;37533:59;;;;-1:-1:-1;;;37533:59:0;;14360:2:1;37533:59:0;;;14342:21:1;14399:2;14379:18;;;14372:30;-1:-1:-1;;;14418:18:1;;;14411:52;14480:18;;37533:59:0;14158:346:1;37533:59:0;37625:8;;-1:-1:-1;;;;;37625:8:0;37611:10;:22;37603:56;;;;-1:-1:-1;;;37603:56:0;;;;;;;:::i;:::-;37685:8;37719:9;37711:41;;;;-1:-1:-1;;;37711:41:0;;;;;;;:::i;:::-;37781:4;37763:24;;;;:9;:24;;;;;:33;;37791:5;;37763:24;:33;;37791:5;;37763:33;:::i;:::-;;;;-1:-1:-1;37853:8:0;;-1:-1:-1;37853:8:0;37862:1;37853:11;;;;;:::i;:::-;;;;;;;37846:4;-1:-1:-1;;;;;37814:51:0;37831:4;-1:-1:-1;;;;;37814:51:0;;;;;;;;;;;37903:11;:20;;;;;;:11;38024:180;38048:5;38044:1;:9;38024:180;;;38115:1;38083:7;38115:1;38091:8;;38100:1;38091:11;;;;;;;:::i;:::-;;;;;;;;;;38083:20;;-1:-1:-1;38083:20:0;;;;;;;;-1:-1:-1;38083:20:0;;-1:-1:-1;;;;;38083:20:0;:34;38075:66;;;;-1:-1:-1;;;38075:66:0;;15674:2:1;38075:66:0;;;15656:21:1;15713:2;15693:18;;;15686:30;-1:-1:-1;;;15732:18:1;;;15725:49;15791:18;;38075:66:0;15472:343:1;38075:66:0;38187:4;38156:7;:20;38164:8;;38173:1;38164:11;;;;;;;:::i;:::-;;;;;;;38156:20;;;;;;;;;;;;:36;;;;;-1:-1:-1;;;;;38156:36:0;;;;;-1:-1:-1;;;;;38156:36:0;;;;;;38055:3;;;;;:::i;:::-;;;;38024:180;;;;37522:689;37462:749;;:::o;36747:490::-;36828:8;;-1:-1:-1;;;;;36828:8:0;36814:10;:22;36806:56;;;;-1:-1:-1;;;36806:56:0;;;;;;;:::i;:::-;30125:8;37042:15;;37024;:33;;;;:::i;:::-;:48;;37016:57;;;;;;37094:13;;:38;;-1:-1:-1;;;37094:38:0;;;;;12428:25:1;;;37121:10:0;12469:18:1;;;12462:60;-1:-1:-1;;;;;37094:13:0;;;;:18;;12401::1;;37094:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37178:4;37148:13;;;;;;;;;-1:-1:-1;;;;;37148:13:0;-1:-1:-1;;;;;37148:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;37145:85;;;37199:12;:19;;-1:-1:-1;;;;37199:19:0;-1:-1:-1;;;37199:19:0;;;37145:85;36747:490;:::o;12616:286::-;12760:41;5758:10;12793:7;12760:18;:41::i;:::-;12752:103;;;;-1:-1:-1;;;12752:103:0;;;;;;;:::i;:::-;12866:28;12876:4;12882:2;12886:7;12866:9;:28::i;34834:697::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;34922:19;34914:51:::1;;;;-1:-1:-1::0;;;34914:51:0::1;;;;;;;:::i;:::-;35014:8:::0;35001:10:::1;35046:467;35066:5;35062:1;:9;35046:467;;;35119:7;:20;35127:8;;35136:1;35127:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35119:20:::0;;-1:-1:-1;35119:20:0;::::1;::::0;;;;;;-1:-1:-1;35119:20:0;;-1:-1:-1;;;;;35119:20:0::1;35105:10;:34;35097:71;;;;-1:-1:-1::0;;;35097:71:0::1;;;;;;;:::i;:::-;35195:22;:35;35218:8;;35227:1;35218:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35195:35:::0;;-1:-1:-1;35195:35:0;::::1;::::0;;;;;;-1:-1:-1;35195:35:0;;::::1;;:44;35187:92;;;;-1:-1:-1::0;;;35187:92:0::1;;;;;;;:::i;:::-;35306:16;:29;35323:8;;35332:1;35323:11;;;;;;;:::i;:::-;;;;;;;35306:29;;;;;;;;;;;;35339:1;35306:34;;35298:72;;;::::0;-1:-1:-1;;;35298:72:0;;17303:2:1;35298:72:0::1;::::0;::::1;17285:21:1::0;17342:2;17322:18;;;17315:30;17381:27;17361:18;;;17354:55;17426:18;;35298:72:0::1;17101:349:1::0;35298:72:0::1;35421:1;35389:16;:29;35406:8;;35415:1;35406:11;;;;;;;:::i;:::-;;;;;;;35389:29;;;;;;;;;;;:33;;;;35441:56;35466:4;35473:10;35485:8;;35494:1;35485:11;;;;;;;:::i;35441:56::-;35073:3;;35046:467;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;34834:697:0:o;12910:185::-;13048:39;13065:4;13071:2;13075:7;13048:39;;;;;;;;;;;;:16;:39::i;10551:400::-;10623:7;10659:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10659:16:0;10694:19;10686:73;;;;-1:-1:-1;;;10686:73:0;;17657:2:1;10686:73:0;;;17639:21:1;17696:2;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;-1:-1:-1;;;17786:18:1;;;17779:39;17835:19;;10686:73:0;17455:405:1;10686:73:0;10773:12;;-1:-1:-1;;;10773:12:0;;;;:21;;;:55;;-1:-1:-1;10798:25:0;;;;:16;:25;;;;;;:30;;10773:55;:99;;;;-1:-1:-1;10832:31:0;;;;:22;:31;;;;;;;;:40;10773:99;10770:151;;;-1:-1:-1;10904:4:0;;10551:400;-1:-1:-1;;10551:400:0:o;10334:209::-;10408:7;-1:-1:-1;;;;;10436:19:0;;10428:73;;;;-1:-1:-1;;;10428:73:0;;18067:2:1;10428:73:0;;;18049:21:1;18106:2;18086:18;;;18079:30;18145:34;18125:18;;;18118:62;-1:-1:-1;;;18196:18:1;;;18189:39;18245:19;;10428:73:0;17865:405:1;10428:73:0;-1:-1:-1;;;;;;10519:16:0;;;;;:9;:16;;;;;;;10334:209::o;37245:::-;37309:8;;-1:-1:-1;;;;;37309:8:0;37295:10;:22;37287:56;;;;-1:-1:-1;;;37287:56:0;;;;;;;:::i;:::-;37362:15;;-1:-1:-1;;;37362:15:0;;;;:24;37354:59;;;;-1:-1:-1;;;37354:59:0;;18477:2:1;37354:59:0;;;18459:21:1;18516:2;18496:18;;;18489:30;-1:-1:-1;;;18535:18:1;;;18528:52;18597:18;;37354:59:0;18275:346:1;37354:59:0;37424:15;:22;;-1:-1:-1;;;;37424:22:0;-1:-1:-1;;;37424:22:0;;;37245:209::o;38416:161::-;38506:8;;-1:-1:-1;;;;;38506:8:0;38492:10;:22;38484:56;;;;-1:-1:-1;;;38484:56:0;;;;;;;:::i;:::-;38551:18;:7;38561:8;;38551:18;:::i;38219:189::-;38298:8;;-1:-1:-1;;;;;38298:8:0;38284:10;:22;38276:56;;;;-1:-1:-1;;;38276:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38351:20:0;;38343:29;;;;;;38383:8;:17;;-1:-1:-1;;;;;;38383:17:0;-1:-1:-1;;;;;38383:17:0;;;;;;;;;;38219:189::o;39910:276::-;39970:4;40009:25;;;:16;:25;;;;;;30075:7;;39991:43;;:15;:43;:::i;:::-;39990:56;39987:192;;;40100:25;;;;:16;:25;;;;;;40082:43;;:15;:43;:::i;:::-;40070:56;;30075:7;40070:56;:::i;39987:192::-;-1:-1:-1;40166:1:0;;39910:276;-1:-1:-1;39910:276:0:o;39987:192::-;39910:276;;;:::o;39527:162::-;39613:8;;-1:-1:-1;;;;;39613:8:0;39599:10;:22;39591:48;;;;-1:-1:-1;;;39591:48:0;;18828:2:1;39591:48:0;;;18810:21:1;18867:2;18847:18;;;18840:30;-1:-1:-1;;;18886:18:1;;;18879:43;18939:18;;39591:48:0;18626:337:1;39591:48:0;39650:31;:20;39673:8;;39650:31;:::i;11069:106::-;11127:13;11160:7;11153:14;;;;;:::i;12279:157::-;12376:52;5758:10;12409:8;12419;12376:18;:52::i;:::-;12279:157;;:::o;13103:328::-;13278:41;5758:10;13311:7;13278:18;:41::i;:::-;13270:103;;;;-1:-1:-1;;;13270:103:0;;;;;;;:::i;:::-;13384:39;13398:4;13404:2;13408:7;13417:5;13384:13;:39::i;40327:161::-;40382:4;40406:25;;;:16;:25;;;;;;:30;;;;:74;;-1:-1:-1;;40440:31:0;;;;:22;:31;;;;;;;;:40;;40327:161::o;32377:1466::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;32484:8:::1;::::0;:52:::1;::::0;-1:-1:-1;;;32484:52:0;;32510:10:::1;32484:52;::::0;::::1;19180:34:1::0;32530:4:0::1;19230:18:1::0;;;19223:43;-1:-1:-1;;;;;32484:8:0;;::::1;::::0;:25:::1;::::0;19115:18:1;;32484:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32462:119;;;::::0;-1:-1:-1;;;32462:119:0;;19729:2:1;32462:119:0::1;::::0;::::1;19711:21:1::0;19768:2;19748:18;;;19741:30;-1:-1:-1;;;19787:18:1;;;19780:47;19844:18;;32462:119:0::1;19527:341:1::0;32462:119:0::1;32600:19:::0;32592:51:::1;;;;-1:-1:-1::0;;;32592:51:0::1;;;;;;;:::i;:::-;32662:12;::::0;-1:-1:-1;;;32662:12:0;::::1;;;:21;32654:52;;;;-1:-1:-1::0;;;32654:52:0::1;;;;;;;:::i;:::-;32757:8:::0;32744:10:::1;32757:8:::0;32807:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;32807:17:0::1;;32787:37;;32843:6;32839:77;32859:5;32855:1;:9;32839:77;;;32899:1;32890:3;32894:1;32890:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;32866:3:::1;;32839:77;;;-1:-1:-1::0;32932:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;32932:76:0;;-1:-1:-1;;;;;32932:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;32963:10:::1;::::0;32983:4:::1;::::0;32990:8;;;;33000:3;;32932:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33029:6;33025:800;33045:5;33041:1;:9;33025:800;;;33084:16;:29;33101:8;;33110:1;33101:11;;;;;;;:::i;:::-;;;;;;;33084:29;;;;;;;;;;;;33117:1;33084:34;33076:69;;;::::0;-1:-1:-1;;;33076:69:0;;21502:2:1;33076:69:0::1;::::0;::::1;21484:21:1::0;21541:2;21521:18;;;21514:30;-1:-1:-1;;;21560:18:1;;;21553:52;21622:18;;33076:69:0::1;21300:346:1::0;33076:69:0::1;33189:20;33197:8;;33206:1;33197:11;;;;;;;:::i;:::-;;;;;;;33189:7;:20::i;:::-;-1:-1:-1::0;;;;;33172:37:0::1;33180:4;-1:-1:-1::0;;;;;33172:37:0::1;;33164:73;;;;-1:-1:-1::0;;;33164:73:0::1;;;;;;;:::i;:::-;33264:22;:35;33287:8;;33296:1;33287:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;33264:35:::0;;-1:-1:-1;33264:35:0;::::1;::::0;;;;;;-1:-1:-1;33264:35:0;;::::1;;:44;33256:92;;;;-1:-1:-1::0;;;33256:92:0::1;;;;;;;:::i;:::-;33390:10;33367:7;:20;33375:8;;33384:1;33375:11;;;;;;;:::i;:::-;;;;;;;33367:20;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;33367:33:0::1;;;;;-1:-1:-1::0;;;;;33367:33:0::1;;;;;;33451:15;33419:16;:29;33436:8;;33445:1;33436:11;;;;;;;:::i;:::-;;;;;;;33419:29;;;;;;;;;;;:47;;;;33797:8;;33806:1;33797:11;;;;;;;:::i;:::-;;;;;;;33790:4;-1:-1:-1::0;;;;;33761:48:0::1;33770:10;-1:-1:-1::0;;;;;33761:48:0::1;;;;;;;;;;;33052:3;;33025:800;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;32377:1466:0:o;31691:678::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;31778:19;31770:51:::1;;;;-1:-1:-1::0;;;31770:51:0::1;;;;;;;:::i;:::-;31870:8:::0;31857:10:::1;31870:8:::0;31920:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;31920:17:0::1;;31900:37;;31956:6;31952:213;31972:5;31968:1;:9;31952:213;;;32025:20;32033:8;;32042:1;32033:11;;;;;;;:::i;32025:20::-;-1:-1:-1::0;;;;;32011:34:0::1;:10;-1:-1:-1::0;;;;;32011:34:0::1;;32003:71;;;;-1:-1:-1::0;;;32003:71:0::1;;;;;;;:::i;:::-;32093:56;32110:10;32130:4;32137:8;;32146:1;32137:11;;;;;;;:::i;32093:56::-;31979:3;;31952:213;;;;32185:6;32181:77;32201:5;32197:1;:9;32181:77;;;32241:1;32232:3;32236:1;32232:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;32208:3:::1;;32181:77;;;-1:-1:-1::0;32274:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;32274:76:0;;-1:-1:-1;;;;;32274:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;32313:4:::1;::::0;32320:10:::1;::::0;32332:8;;;;32342:3;;32274:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;;;;31691:678:0:o;39270:249::-;39390:13;39452:20;39474:25;39491:7;39474:16;:25::i;:::-;39501:7;39435:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39421:89;;39270:249;;;:::o;30873:810::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;30972:8:::1;::::0;:52:::1;::::0;-1:-1:-1;;;30972:52:0;;30998:10:::1;30972:52;::::0;::::1;19180:34:1::0;31018:4:0::1;19230:18:1::0;;;19223:43;-1:-1:-1;;;;;30972:8:0;;::::1;::::0;:25:::1;::::0;19115:18:1;;30972:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30950:119;;;::::0;-1:-1:-1;;;30950:119:0;;19729:2:1;30950:119:0::1;::::0;::::1;19711:21:1::0;19768:2;19748:18;;;19741:30;-1:-1:-1;;;19787:18:1;;;19780:47;19844:18;;30950:119:0::1;19527:341:1::0;30950:119:0::1;31088:19:::0;31080:51:::1;;;;-1:-1:-1::0;;;31080:51:0::1;;;;;;;:::i;:::-;31182:8:::0;31169:10:::1;31182:8:::0;31232:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;31232:17:0::1;;31212:37;;31268:6;31264:77;31284:5;31280:1;:9;31264:77;;;31324:1;31315:3;31319:1;31315:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;31291:3:::1;;31264:77;;;-1:-1:-1::0;31357:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;31357:76:0;;-1:-1:-1;;;;;31357:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;31388:10:::1;::::0;31408:4:::1;::::0;31415:8;;;;31425:3;;31357:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31454:6;31450:215;31470:5;31466:1;:9;31450:215;;;31526:20;31534:8;;31543:1;31534:11;;;;;;;:::i;31526:20::-;-1:-1:-1::0;;;;;31509:37:0::1;31517:4;-1:-1:-1::0;;;;;31509:37:0::1;;31501:73;;;;-1:-1:-1::0;;;31501:73:0::1;;;;;;;:::i;:::-;31593:56;31618:4;31625:10;31637:8;;31646:1;31637:11;;;;;;;:::i;31593:56::-;31477:3;;31450:215;;6331:201:::0;6055:13;:11;:13::i;:::-;-1:-1:-1;;;;;6420:22:0;::::1;6412:73;;;::::0;-1:-1:-1;;;6412:73:0;;23770:2:1;6412:73:0::1;::::0;::::1;23752:21:1::0;23809:2;23789:18;;;23782:30;23848:34;23828:18;;;23821:62;-1:-1:-1;;;23899:18:1;;;23892:36;23945:19;;6412:73:0::1;23568:402:1::0;6412:73:0::1;6496:28;6515:8;6496:18;:28::i;33851:975::-:0;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;33937:19;33929:51:::1;;;;-1:-1:-1::0;;;33929:51:0::1;;;;;;;:::i;:::-;33999:12;::::0;-1:-1:-1;;;33999:12:0;::::1;;;:21;33991:52;;;;-1:-1:-1::0;;;33991:52:0::1;;;;;;;:::i;:::-;34092:8:::0;34079:10:::1;34122:213;34142:5;34138:1;:9;34122:213;;;34195:20;34203:8;;34212:1;34203:11;;;;;;;:::i;34195:20::-;-1:-1:-1::0;;;;;34181:34:0::1;:10;-1:-1:-1::0;;;;;34181:34:0::1;;34173:71;;;;-1:-1:-1::0;;;34173:71:0::1;;;;;;;:::i;:::-;34263:56;34280:10;34300:4;34307:8;;34316:1;34307:11;;;;;;;:::i;34263:56::-;34149:3;;34122:213;;;;34355:6;34351:457;34371:5;34367:1;:9;34351:457;;;34410:16;:29;34427:8;;34436:1;34427:11;;;;;;;:::i;:::-;;;;;;;34410:29;;;;;;;;;;;;34443:1;34410:34;34402:69;;;::::0;-1:-1:-1;;;34402:69:0;;21502:2:1;34402:69:0::1;::::0;::::1;21484:21:1::0;21541:2;21521:18;;;21514:30;-1:-1:-1;;;21560:18:1;;;21553:52;21622:18;;34402:69:0::1;21300:346:1::0;34402:69:0::1;34515:20;34523:8;;34532:1;34523:11;;;;;;;:::i;34515:20::-;-1:-1:-1::0;;;;;34498:37:0::1;34506:4;-1:-1:-1::0;;;;;34498:37:0::1;;34490:73;;;;-1:-1:-1::0;;;34490:73:0::1;;;;;;;:::i;:::-;34590:22;:35;34613:8;;34622:1;34613:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;34590:35:::0;;-1:-1:-1;34590:35:0;::::1;::::0;;;;;;-1:-1:-1;34590:35:0;;::::1;;:44;34582:92;;;;-1:-1:-1::0;;;34582:92:0::1;;;;;;;:::i;:::-;34716:10;34693:7;:20;34701:8;;34710:1;34701:11;;;;;;;:::i;:::-;;;;;;;34693:20;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;34693:33:0::1;;;;;-1:-1:-1::0;;;;;34693:33:0::1;;;;;;34777:15;34745:16;:29;34762:8;;34771:1;34762:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;34745:29:::0;;-1:-1:-1;34745:29:0;::::1;::::0;;;;;;-1:-1:-1;34745:29:0;:47;34378:3:::1;;34351:457;;15018:174:::0;15093:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15093:29:0;-1:-1:-1;;;;;15093:29:0;;;;;;;;:24;;15147:23;15093:24;15147:14;:23::i;:::-;-1:-1:-1;;;;;15138:46:0;;;;;;;;;;;15018:174;;:::o;13897:374::-;13990:4;13851:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13851:16:0;14007:73;;;;-1:-1:-1;;;14007:73:0;;24177:2:1;14007:73:0;;;24159:21:1;24216:2;24196:18;;;24189:30;24255:34;24235:18;;;24228:62;-1:-1:-1;;;24306:18:1;;;24299:42;24358:19;;14007:73:0;23975:408:1;14007:73:0;14091:13;14107:23;14122:7;14107:14;:23::i;:::-;14091:39;;14160:5;-1:-1:-1;;;;;14149:16:0;:7;-1:-1:-1;;;;;14149:16:0;;:52;;;-1:-1:-1;;;;;;12565:25:0;;;12541:4;12565:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;14169:32;14149:87;;;;14229:7;-1:-1:-1;;;;;14205:31:0;:20;14217:7;14205:11;:20::i;:::-;-1:-1:-1;;;;;14205:31:0;;14149:87;:113;;;-1:-1:-1;;;;;;14240:22:0;;14257:4;14240:22;14149:113;14141:122;13897:374;-1:-1:-1;;;;13897:374:0:o;14279:731::-;14406:12;;-1:-1:-1;;;14406:12:0;;;;14403:174;;14452:25;;;;:16;:25;;;;;;:30;;:65;;-1:-1:-1;14486:31:0;;;;:22;:31;;;;;;;;14452:65;14444:121;;;;-1:-1:-1;;;14444:121:0;;24590:2:1;14444:121:0;;;24572:21:1;24629:2;24609:18;;;24602:30;24668:34;24648:18;;;24641:62;-1:-1:-1;;;24719:18:1;;;24712:41;24770:19;;14444:121:0;24388:407:1;14444:121:0;14622:4;-1:-1:-1;;;;;14595:31:0;:23;14610:7;14595:14;:23::i;:::-;-1:-1:-1;;;;;14595:31:0;;:56;;;-1:-1:-1;;;;;;14630:21:0;;14646:4;14630:21;14595:56;14587:106;;;;-1:-1:-1;;;14587:106:0;;25002:2:1;14587:106:0;;;24984:21:1;25041:2;25021:18;;;25014:30;25080:34;25060:18;;;25053:62;-1:-1:-1;;;25131:18:1;;;25124:35;25176:19;;14587:106:0;24800:401:1;14587:106:0;-1:-1:-1;;;;;14712:16:0;;14704:65;;;;-1:-1:-1;;;14704:65:0;;25408:2:1;14704:65:0;;;25390:21:1;25447:2;25427:18;;;25420:30;25486:34;25466:18;;;25459:62;-1:-1:-1;;;25537:18:1;;;25530:34;25581:19;;14704:65:0;25206:400:1;14704:65:0;14834:29;14851:1;14855:7;14834:8;:29::i;:::-;-1:-1:-1;;;;;14876:15:0;;;;;;:9;:15;;;;;:20;;14895:1;;14876:15;:20;;14895:1;;14876:20;:::i;:::-;;;;-1:-1:-1;;;;;;;14907:13:0;;;;;;:9;:13;;;;;:18;;14924:1;;14907:13;:18;;14924:1;;14907:18;:::i;:::-;;;;-1:-1:-1;;14936:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14936:21:0;-1:-1:-1;;;;;14936:21:0;;;;;;;;;14975:27;;14936:16;;14975:27;;;;;;;14279:731;;;:::o;15200:315::-;15355:8;-1:-1:-1;;;;;15346:17:0;:5;-1:-1:-1;;;;;15346:17:0;;;15338:55;;;;-1:-1:-1;;;15338:55:0;;25813:2:1;15338:55:0;;;25795:21:1;25852:2;25832:18;;;25825:30;25891:27;25871:18;;;25864:55;25936:18;;15338:55:0;25611:349:1;15338:55:0;-1:-1:-1;;;;;15404:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15404:46:0;;;;;;;;;;15466:41;;2055::1;;;15466::0;;2028:18:1;15466:41:0;;;;;;;15200:315;;;:::o;13439:::-;13596:28;13606:4;13612:2;13616:7;13596:9;:28::i;:::-;13643:48;13666:4;13672:2;13676:7;13685:5;13643:22;:48::i;:::-;13635:111;;;;-1:-1:-1;;;13635:111:0;;;;;;;:::i;8016:723::-;8072:13;8293:10;8289:53;;-1:-1:-1;;8320:10:0;;;;;;;;;;;;-1:-1:-1;;;8320:10:0;;;;;8016:723::o;8289:53::-;8367:5;8352:12;8408:78;8415:9;;8408:78;;8441:8;;;;:::i;:::-;;-1:-1:-1;8464:10:0;;-1:-1:-1;8472:2:0;8464:10;;:::i;:::-;;;8408:78;;;8496:19;8528:6;8518:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8518:17:0;;8496:39;;8546:154;8553:10;;8546:154;;8580:11;8590:1;8580:11;;:::i;:::-;;-1:-1:-1;8649:10:0;8657:2;8649:5;:10;:::i;:::-;8636:24;;:2;:24;:::i;:::-;8623:39;;8606:6;8613;8606:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8606:56:0;;;;;;;;-1:-1:-1;8677:11:0;8686:2;8677:11;;:::i;:::-;;;8546:154;;6191:132;6169:6;;-1:-1:-1;;;;;6169:6:0;5758:10;6255:23;6247:68;;;;-1:-1:-1;;;6247:68:0;;26960:2:1;6247:68:0;;;26942:21:1;;;26979:18;;;26972:30;27038:34;27018:18;;;27011:62;27090:18;;6247:68:0;26758:356:1;6247:68:0;6191:132::o;6540:191::-;6633:6;;;-1:-1:-1;;;;;6650:17:0;;;-1:-1:-1;;;;;;6650:17:0;;;;;;;6683:40;;6633:6;;;6650:17;6633:6;;6683:40;;6614:16;;6683:40;6603:128;6540:191;:::o;15523:799::-;15678:4;-1:-1:-1;;;;;15699:13:0;;5607:19;:23;15695:620;;15735:72;;-1:-1:-1;;;15735:72:0;;-1:-1:-1;;;;;15735:36:0;;;;;:72;;5758:10;;15786:4;;15792:7;;15801:5;;15735:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15735:72:0;;;;;;;;-1:-1:-1;;15735:72:0;;;;;;;;;;;;:::i;:::-;;;15731:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15977:13:0;;15973:272;;16020:60;;-1:-1:-1;;;16020:60:0;;;;;;;:::i;15973:272::-;16195:6;16189:13;16180:6;16176:2;16172:15;16165:38;15731:529;-1:-1:-1;;;;;;15858:51:0;-1:-1:-1;;;15858:51:0;;-1:-1:-1;15851:58:0;;15695:620;-1:-1:-1;16299:4:0;15523:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;715:367:1;778:8;788:6;842:3;835:4;827:6;823:17;819:27;809:55;;860:1;857;850:12;809:55;-1:-1:-1;883:20:1;;926:18;915:30;;912:50;;;958:1;955;948:12;912:50;995:4;987:6;983:17;971:29;;1055:3;1048:4;1038:6;1035:1;1031:14;1023:6;1019:27;1015:38;1012:47;1009:67;;;1072:1;1069;1062:12;1009:67;715:367;;;;;:::o;1087:437::-;1173:6;1181;1234:2;1222:9;1213:7;1209:23;1205:32;1202:52;;;1250:1;1247;1240:12;1202:52;1290:9;1277:23;1323:18;1315:6;1312:30;1309:50;;;1355:1;1352;1345:12;1309:50;1394:70;1456:7;1447:6;1436:9;1432:22;1394:70;:::i;:::-;1483:8;;1368:96;;-1:-1:-1;1087:437:1;-1:-1:-1;;;;1087:437:1:o;1529:131::-;-1:-1:-1;;;;;;1603:32:1;;1593:43;;1583:71;;1650:1;1647;1640:12;1665:245;1723:6;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:30;1874:5;1850:30;:::i;:::-;1899:5;1665:245;-1:-1:-1;;;1665:245:1:o;2107:258::-;2179:1;2189:113;2203:6;2200:1;2197:13;2189:113;;;2279:11;;;2273:18;2260:11;;;2253:39;2225:2;2218:10;2189:113;;;2320:6;2317:1;2314:13;2311:48;;;-1:-1:-1;;2355:1:1;2337:16;;2330:27;2107:258::o;2370:::-;2412:3;2450:5;2444:12;2477:6;2472:3;2465:19;2493:63;2549:6;2542:4;2537:3;2533:14;2526:4;2519:5;2515:16;2493:63;:::i;:::-;2610:2;2589:15;-1:-1:-1;;2585:29:1;2576:39;;;;2617:4;2572:50;;2370:258;-1:-1:-1;;2370:258:1:o;2633:220::-;2782:2;2771:9;2764:21;2745:4;2802:45;2843:2;2832:9;2828:18;2820:6;2802:45;:::i;2858:180::-;2917:6;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;-1:-1:-1;3009:23:1;;2858:180;-1:-1:-1;2858:180:1:o;3251:173::-;3319:20;;-1:-1:-1;;;;;3368:31:1;;3358:42;;3348:70;;3414:1;3411;3404:12;3429:254;3497:6;3505;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;3597:29;3616:9;3597:29;:::i;:::-;3587:39;3673:2;3658:18;;;;3645:32;;-1:-1:-1;;;3429:254:1:o;3688:347::-;3739:8;3749:6;3803:3;3796:4;3788:6;3784:17;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;-1:-1:-1;3844:20:1;;3887:18;3876:30;;3873:50;;;3919:1;3916;3909:12;3873:50;3956:4;3948:6;3944:17;3932:29;;4008:3;4001:4;3992:6;3984;3980:19;3976:30;3973:39;3970:59;;;4025:1;4022;4015:12;4040:626;4137:6;4145;4153;4161;4169;4222:3;4210:9;4201:7;4197:23;4193:33;4190:53;;;4239:1;4236;4229:12;4190:53;4262:29;4281:9;4262:29;:::i;:::-;4252:39;;4310:38;4344:2;4333:9;4329:18;4310:38;:::i;:::-;4300:48;;4395:2;4384:9;4380:18;4367:32;4357:42;;4450:2;4439:9;4435:18;4422:32;4477:18;4469:6;4466:30;4463:50;;;4509:1;4506;4499:12;4463:50;4548:58;4598:7;4589:6;4578:9;4574:22;4548:58;:::i;:::-;4040:626;;;;-1:-1:-1;4040:626:1;;-1:-1:-1;4625:8:1;;4522:84;4040:626;-1:-1:-1;;;4040:626:1:o;5060:328::-;5137:6;5145;5153;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;5245:29;5264:9;5245:29;:::i;:::-;5235:39;;5293:38;5327:2;5316:9;5312:18;5293:38;:::i;:::-;5283:48;;5378:2;5367:9;5363:18;5350:32;5340:42;;5060:328;;;;;:::o;5393:186::-;5452:6;5505:2;5493:9;5484:7;5480:23;5476:32;5473:52;;;5521:1;5518;5511:12;5473:52;5544:29;5563:9;5544:29;:::i;5584:410::-;5655:6;5663;5716:2;5704:9;5695:7;5691:23;5687:32;5684:52;;;5732:1;5729;5722:12;5684:52;5772:9;5759:23;5805:18;5797:6;5794:30;5791:50;;;5837:1;5834;5827:12;5791:50;5876:58;5926:7;5917:6;5906:9;5902:22;5876:58;:::i;5999:118::-;6085:5;6078:13;6071:21;6064:5;6061:32;6051:60;;6107:1;6104;6097:12;6122:315;6187:6;6195;6248:2;6236:9;6227:7;6223:23;6219:32;6216:52;;;6264:1;6261;6254:12;6216:52;6287:29;6306:9;6287:29;:::i;:::-;6277:39;;6366:2;6355:9;6351:18;6338:32;6379:28;6401:5;6379:28;:::i;:::-;6426:5;6416:15;;;6122:315;;;;;:::o;6442:127::-;6503:10;6498:3;6494:20;6491:1;6484:31;6534:4;6531:1;6524:15;6558:4;6555:1;6548:15;6574:1138;6669:6;6677;6685;6693;6746:3;6734:9;6725:7;6721:23;6717:33;6714:53;;;6763:1;6760;6753:12;6714:53;6786:29;6805:9;6786:29;:::i;:::-;6776:39;;6834:38;6868:2;6857:9;6853:18;6834:38;:::i;:::-;6824:48;;6919:2;6908:9;6904:18;6891:32;6881:42;;6974:2;6963:9;6959:18;6946:32;6997:18;7038:2;7030:6;7027:14;7024:34;;;7054:1;7051;7044:12;7024:34;7092:6;7081:9;7077:22;7067:32;;7137:7;7130:4;7126:2;7122:13;7118:27;7108:55;;7159:1;7156;7149:12;7108:55;7195:2;7182:16;7217:2;7213;7210:10;7207:36;;;7223:18;;:::i;:::-;7298:2;7292:9;7266:2;7352:13;;-1:-1:-1;;7348:22:1;;;7372:2;7344:31;7340:40;7328:53;;;7396:18;;;7416:22;;;7393:46;7390:72;;;7442:18;;:::i;:::-;7482:10;7478:2;7471:22;7517:2;7509:6;7502:18;7557:7;7552:2;7547;7543;7539:11;7535:20;7532:33;7529:53;;;7578:1;7575;7568:12;7529:53;7634:2;7629;7625;7621:11;7616:2;7608:6;7604:15;7591:46;7679:1;7674:2;7669;7661:6;7657:15;7653:24;7646:35;7700:6;7690:16;;;;;;;6574:1138;;;;;;;:::o;7717:1210::-;7877:6;7885;7893;7901;7909;7917;7925;7933;7986:3;7974:9;7965:7;7961:23;7957:33;7954:53;;;8003:1;8000;7993:12;7954:53;8026:29;8045:9;8026:29;:::i;:::-;8016:39;;8074:38;8108:2;8097:9;8093:18;8074:38;:::i;:::-;8064:48;;8163:2;8152:9;8148:18;8135:32;8186:18;8227:2;8219:6;8216:14;8213:34;;;8243:1;8240;8233:12;8213:34;8282:70;8344:7;8335:6;8324:9;8320:22;8282:70;:::i;:::-;8371:8;;-1:-1:-1;8256:96:1;-1:-1:-1;8459:2:1;8444:18;;8431:32;;-1:-1:-1;8475:16:1;;;8472:36;;;8504:1;8501;8494:12;8472:36;8543:72;8607:7;8596:8;8585:9;8581:24;8543:72;:::i;:::-;8634:8;;-1:-1:-1;8517:98:1;-1:-1:-1;8722:3:1;8707:19;;8694:33;;-1:-1:-1;8739:16:1;;;8736:36;;;8768:1;8765;8758:12;8736:36;;8807:60;8859:7;8848:8;8837:9;8833:24;8807:60;:::i;:::-;7717:1210;;;;-1:-1:-1;7717:1210:1;;-1:-1:-1;7717:1210:1;;;;;;8886:8;-1:-1:-1;;;7717:1210:1:o;8932:260::-;9000:6;9008;9061:2;9049:9;9040:7;9036:23;9032:32;9029:52;;;9077:1;9074;9067:12;9029:52;9100:29;9119:9;9100:29;:::i;:::-;9090:39;;9148:38;9182:2;9171:9;9167:18;9148:38;:::i;:::-;9138:48;;8932:260;;;;;:::o;9197:695::-;9303:6;9311;9319;9327;9335;9343;9396:3;9384:9;9375:7;9371:23;9367:33;9364:53;;;9413:1;9410;9403:12;9364:53;9436:29;9455:9;9436:29;:::i;:::-;9426:39;;9484:38;9518:2;9507:9;9503:18;9484:38;:::i;:::-;9474:48;;9569:2;9558:9;9554:18;9541:32;9531:42;;9620:2;9609:9;9605:18;9592:32;9582:42;;9675:3;9664:9;9660:19;9647:33;9703:18;9695:6;9692:30;9689:50;;;9735:1;9732;9725:12;9689:50;9774:58;9824:7;9815:6;9804:9;9800:22;9774:58;:::i;:::-;9197:695;;;;-1:-1:-1;9197:695:1;;-1:-1:-1;9197:695:1;;9851:8;;9197:695;-1:-1:-1;;;9197:695:1:o;9897:355::-;10099:2;10081:21;;;10138:2;10118:18;;;10111:30;10177:33;10172:2;10157:18;;10150:61;10243:2;10228:18;;9897:355::o;10257:342::-;10459:2;10441:21;;;10498:2;10478:18;;;10471:30;-1:-1:-1;;;10532:2:1;10517:18;;10510:48;10590:2;10575:18;;10257:342::o;11011:127::-;11072:10;11067:3;11063:20;11060:1;11053:31;11103:4;11100:1;11093:15;11127:4;11124:1;11117:15;11547:348;11749:2;11731:21;;;11788:2;11768:18;;;11761:30;11827:26;11822:2;11807:18;;11800:54;11886:2;11871:18;;11547:348::o;12533:380::-;12612:1;12608:12;;;;12655;;;12676:61;;12730:4;12722:6;12718:17;12708:27;;12676:61;12783:2;12775:6;12772:14;12752:18;12749:38;12746:161;;;12829:10;12824:3;12820:20;12817:1;12810:31;12864:4;12861:1;12854:15;12892:4;12889:1;12882:15;12746:161;;12533:380;;;:::o;14509:345::-;14711:2;14693:21;;;14750:2;14730:18;;;14723:30;-1:-1:-1;;;14784:2:1;14769:18;;14762:51;14845:2;14830:18;;14509:345::o;14859:343::-;15061:2;15043:21;;;15100:2;15080:18;;;15073:30;-1:-1:-1;;;15134:2:1;15119:18;;15112:49;15193:2;15178:18;;14859:343::o;15207:127::-;15268:10;15263:3;15259:20;15256:1;15249:31;15299:4;15296:1;15289:15;15323:4;15320:1;15313:15;15339:128;15379:3;15410:1;15406:6;15403:1;15400:13;15397:39;;;15416:18;;:::i;:::-;-1:-1:-1;15452:9:1;;15339:128::o;15820:135::-;15859:3;-1:-1:-1;;15880:17:1;;15877:43;;;15900:18;;:::i;:::-;-1:-1:-1;15947:1:1;15936:13;;15820:135::o;15960:125::-;16000:4;16028:1;16025;16022:8;16019:34;;;16033:18;;:::i;:::-;-1:-1:-1;16070:9:1;;15960:125::o;16090:184::-;16160:6;16213:2;16201:9;16192:7;16188:23;16184:32;16181:52;;;16229:1;16226;16219:12;16181:52;-1:-1:-1;16252:16:1;;16090:184;-1:-1:-1;16090:184:1:o;16279:413::-;16481:2;16463:21;;;16520:2;16500:18;;;16493:30;16559:34;16554:2;16539:18;;16532:62;-1:-1:-1;;;16625:2:1;16610:18;;16603:47;16682:3;16667:19;;16279:413::o;16697:399::-;16899:2;16881:21;;;16938:2;16918:18;;;16911:30;16977:34;16972:2;16957:18;;16950:62;-1:-1:-1;;;17043:2:1;17028:18;;17021:33;17086:3;17071:19;;16697:399::o;19277:245::-;19344:6;19397:2;19385:9;19376:7;19372:23;19368:32;19365:52;;;19413:1;19410;19403:12;19365:52;19445:9;19439:16;19464:28;19486:5;19464:28;:::i;19873:1422::-;-1:-1:-1;;;;;20334:15:1;;;20316:34;;20407:15;;;20369:2;20387:18;;;20380:43;;;;20296:3;20454:2;20439:18;;20432:31;;;20479:19;;20472:35;;;20259:4;;20288:19;-1:-1:-1;;;;;20519:31:1;;20516:51;;;20563:1;20560;20553:12;20516:51;20597:6;20594:1;20590:14;20576:28;;20655:6;20647;20641:3;20630:9;20626:19;20613:49;20754:1;20681:22;;;20730:3;20722:12;;;20743:13;;;20796:18;;;20792:28;;;20787:2;20772:18;;20765:56;20868:13;;20890:20;;;;20961:15;;;;20754:1;20934:3;20926:12;;21004:171;21018:8;21015:1;21012:15;21004:171;;;21081:13;;21069:26;;21150:15;;;;21042:1;21035:9;;;;;21115:12;;;;21004:171;;;-1:-1:-1;21212:19:1;;;21206:3;21191:19;;21184:48;315:1;303:14;;350:4;341:14;;21241:48;19873:1422;-1:-1:-1;;;;;;;;;;;19873:1422:1:o;21651:347::-;21853:2;21835:21;;;21892:2;21872:18;;;21865:30;21931:25;21926:2;21911:18;;21904:53;21989:2;21974:18;;21651:347::o;22129:973::-;22214:12;;22179:3;;22269:1;22289:18;;;;22342;;;;22369:61;;22423:4;22415:6;22411:17;22401:27;;22369:61;22449:2;22497;22489:6;22486:14;22466:18;22463:38;22460:161;;;22543:10;22538:3;22534:20;22531:1;22524:31;22578:4;22575:1;22568:15;22606:4;22603:1;22596:15;22460:161;22637:18;22664:104;;;;22782:1;22777:319;;;;22630:466;;22664:104;-1:-1:-1;;22697:24:1;;22685:37;;22742:16;;;;-1:-1:-1;22664:104:1;;22777:319;22076:1;22069:14;;;22113:4;22100:18;;22871:1;22885:165;22899:6;22896:1;22893:13;22885:165;;;22977:14;;22964:11;;;22957:35;23020:16;;;;22914:10;;22885:165;;;22889:3;;23079:6;23074:3;23070:16;23063:23;;22630:466;;;;;;;22129:973;;;;:::o;23107:456::-;23328:3;23356:38;23390:3;23382:6;23356:38;:::i;:::-;23423:6;23417:13;23439:52;23484:6;23480:2;23473:4;23465:6;23461:17;23439:52;:::i;:::-;23507:50;23549:6;23545:2;23541:15;23533:6;23507:50;:::i;:::-;23500:57;23107:456;-1:-1:-1;;;;;;;23107:456:1:o;25965:414::-;26167:2;26149:21;;;26206:2;26186:18;;;26179:30;26245:34;26240:2;26225:18;;26218:62;-1:-1:-1;;;26311:2:1;26296:18;;26289:48;26369:3;26354:19;;25965:414::o;26384:127::-;26445:10;26440:3;26436:20;26433:1;26426:31;26476:4;26473:1;26466:15;26500:4;26497:1;26490:15;26516:120;26556:1;26582;26572:35;;26587:18;;:::i;:::-;-1:-1:-1;26621:9:1;;26516:120::o;26641:112::-;26673:1;26699;26689:35;;26704:18;;:::i;:::-;-1:-1:-1;26738:9:1;;26641:112::o;27119:489::-;-1:-1:-1;;;;;27388:15:1;;;27370:34;;27440:15;;27435:2;27420:18;;27413:43;27487:2;27472:18;;27465:34;;;27535:3;27530:2;27515:18;;27508:31;;;27313:4;;27556:46;;27582:19;;27574:6;27556:46;:::i;:::-;27548:54;27119:489;-1:-1:-1;;;;;;27119:489:1:o;27613:249::-;27682:6;27735:2;27723:9;27714:7;27710:23;27706:32;27703:52;;;27751:1;27748;27741:12;27703:52;27783:9;27777:16;27802:30;27826:5;27802:30;:::i

Swarm Source

ipfs://df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af
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.