ETH Price: $3,829.87 (+5.98%)

Token

MeowZuki (MEOWZUKI)
 

Overview

Max Total Supply

605 MEOWZUKI

Holders

160

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MEOWZUKI
0xef2669d3e77a745ef976cb40d35882bafd186094
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:
MeowZuki

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-30
*/

// SPDX-License-Identifier: MIT     

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

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

pragma solidity ^0.8.0;
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 renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


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

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

pragma solidity ^0.8.0;

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

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

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

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

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

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

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function approve(address to, uint256 tokenId) external payable;

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

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

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

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

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

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

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

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

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

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

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

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

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

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

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}



pragma solidity ^0.8.0;

interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}


pragma solidity ^0.8.16;

contract MeowZuki is Ownable, ERC721A, ReentrancyGuard, DefaultOperatorFilterer{
    string public CONTRACT_URI = "";
    mapping(address => uint) public userHasMinted;
    bool public REVEALED;
    string public UNREVEALED_URI = "";
    string public BASE_URI = "";
    bool public isPublicMintEnabled = false;
    uint public COLLECTION_SIZE = 7777; 
    uint public FREE_SUPPLY_PER_WALLET = 150;

    address[] public tokenAddress = [
        0xB6a37b5d14D502c3Ab0Ae6f3a0E058BC9517786e,
        0xBAF07C6B271886B09E975ca990c7184D064E8cB0,
        0xEdB61f74B0d09B2558F1eeb79B247c1F363Ae452,
        0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D,
        0x394E3d3044fC89fCDd966D3cb35Ac0B32B0Cda91,
        0x8821BeE2ba0dF28761AffF119D66390D594CD280
    ];

    uint public priceOwned = 0.005 ether; 
    uint public priceStandart = 0.01 ether; 

    uint internal freeOwned = 2;
    uint internal freeStandart = 0;

    constructor() ERC721A("MeowZuki", "MEOWZUKI") {}

    function MintTeam(uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more MeowZuki in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function hasNft() internal view returns (bool) {
        bool has = false;

        for (uint256 i = 0; i < tokenAddress.length; i++) {
            if (IERC721A(tokenAddress[i]).balanceOf(msg.sender) > 0){
                has = true;
                break;
            }
        }

        return has;
    }

    function getPrice(uint quantity) public view returns (uint256){
        bool has = hasNft();
        if (has){
            uint freeCount = freeOwned - userHasMinted[msg.sender];
            if (freeCount > quantity){
                return 0;
            }
            return priceOwned * (quantity - freeCount);
        }
        else {
            uint freeCount = freeStandart - userHasMinted[msg.sender];
            if (freeCount > quantity){
                return 0;
            }
            return priceStandart * (quantity - freeCount);
        } 
    }

    function _getPrice(uint quantity, bool has) internal view returns (uint256){
        if (has){
            uint freeCount = freeOwned - userHasMinted[msg.sender];
            if (freeCount > quantity){
                return 0;
            }
            return priceOwned * (quantity - freeCount);
        }
        else {
            uint freeCount = freeStandart - userHasMinted[msg.sender];
            if (freeCount > quantity){
                return 0;
            }
            return priceStandart * (quantity - freeCount);
        } 
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        require(isPublicMintEnabled, "Mint not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more left!");

        require(balanceOf(msg.sender) + quantity <= FREE_SUPPLY_PER_WALLET, "Tried to mint over limit");
        bool has = hasNft();
        require(msg.value >= _getPrice(quantity, has), "Must send more money!");

        _safeMint(msg.sender, quantity);

        if (has){
            userHasMinted[msg.sender] = quantity + userHasMinted[msg.sender] > freeOwned ? freeOwned : quantity + userHasMinted[msg.sender];
        }
        else {
            userHasMinted[msg.sender] = quantity + userHasMinted[msg.sender] > freeStandart ? freeStandart : quantity + userHasMinted[msg.sender];
        }

    }

    function setFreeOwned(uint count) public onlyOwner {
        freeOwned = count;
    }

    function setFreeStandart(uint count) public onlyOwner {
        freeStandart = count;
    }

    function setPriceStandart(uint price) public onlyOwner {
        priceStandart = price;
    }

    function setPriceOwned(uint price) public onlyOwner {
        priceOwned = price;
    }

    function setTokenAddress(address[] memory _tokenAddress) public onlyOwner {
        tokenAddress = _tokenAddress;
    }

    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

    function contractURI() public view returns (string memory) {
        return CONTRACT_URI;
    }

    function setContract(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function ChangeFreePerWallet(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A) onlyAllowedOperator {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceStandart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","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":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"setFreeOwned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"setFreeStandart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceOwned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPriceStandart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokenAddress","type":"address[]"}],"name":"setTokenAddress","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":"","type":"uint256"}],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a908162000024919062000958565b5060405180602001604052806000815250600d908162000045919062000958565b5060405180602001604052806000815250600e908162000066919062000958565b506000600f60006101000a81548160ff021916908315150217905550611e6160105560966011556040518060c0016040528073b6a37b5d14d502c3ab0ae6f3a0e058bc9517786e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173baf07c6b271886b09e975ca990c7184d064e8cb073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173edb61f74b0d09b2558f1eeb79b247c1f363ae45273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173bc4ca0eda7647a8ab7c2061c2e118a18a936f13d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173394e3d3044fc89fcdd966d3cb35ac0b32b0cda9173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738821bee2ba0df28761afff119d66390d594cd28073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060129060066200024c92919062000630565b506611c37937e08000601355662386f26fc10000601455600260155560006016553480156200027a57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600881526020017f4d656f775a756b690000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4d454f575a554b490000000000000000000000000000000000000000000000008152506200031e620003126200055f60201b60201c565b6200056760201b60201c565b81600390816200032f919062000958565b50806004908162000341919062000958565b50620003526200062b60201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620005575780156200041d576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620003e392919062000a84565b600060405180830381600087803b158015620003fe57600080fd5b505af115801562000413573d6000803e3d6000fd5b5050505062000556565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620004d7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200049d92919062000a84565b600060405180830381600087803b158015620004b857600080fd5b505af1158015620004cd573d6000803e3d6000fd5b5050505062000555565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000520919062000ab1565b600060405180830381600087803b1580156200053b57600080fd5b505af115801562000550573d6000803e3d6000fd5b505050505b5b5b505062000ace565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b828054828255906000526020600020908101928215620006ac579160200282015b82811115620006ab5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000651565b5b509050620006bb9190620006bf565b5090565b5b80821115620006da576000816000905550600101620006c0565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076057607f821691505b60208210810362000776576200077562000718565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007a1565b620007ec8683620007a1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000839620008336200082d8462000804565b6200080e565b62000804565b9050919050565b6000819050919050565b620008558362000818565b6200086d620008648262000840565b848454620007ae565b825550505050565b600090565b6200088462000875565b620008918184846200084a565b505050565b5b81811015620008b957620008ad6000826200087a565b60018101905062000897565b5050565b601f8211156200090857620008d2816200077c565b620008dd8462000791565b81016020851015620008ed578190505b62000905620008fc8562000791565b83018262000896565b50505b505050565b600082821c905092915050565b60006200092d600019846008026200090d565b1980831691505092915050565b60006200094883836200091a565b9150826002028217905092915050565b6200096382620006de565b67ffffffffffffffff8111156200097f576200097e620006e9565b5b6200098b825462000747565b62000998828285620008bd565b600060209050601f831160018114620009d05760008415620009bb578287015190505b620009c785826200093a565b86555062000a37565b601f198416620009e0866200077c565b60005b8281101562000a0a57848901518255600182019150602085019450602081019050620009e3565b8683101562000a2a578489015162000a26601f8916826200091a565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a6c8262000a3f565b9050919050565b62000a7e8162000a5f565b82525050565b600060408201905062000a9b600083018562000a73565b62000aaa602083018462000a73565b9392505050565b600060208201905062000ac8600083018462000a73565b92915050565b6141e98062000ade6000396000f3fe6080604052600436106102515760003560e01c806378728f2611610139578063c87b56dd116100b6578063dbddb26a1161007a578063dbddb26a14610845578063e13bc8eb14610870578063e75722301461089b578063e8a3d485146108d8578063e985e9c514610903578063f2fde38b1461094057610251565b8063c87b56dd14610762578063ccdc17671461079f578063d5392564146107c8578063d7c3c617146107f1578063d8258d951461081a57610251565b8063a1db246e116100fd578063a1db246e146106b2578063a22cb465146106db578063a4cdd71914610704578063a76a95871461071b578063b88d4fde1461074657610251565b806378728f26146105da5780638da5cb5b1461060357806395d89b411461062e5780639e6b26ba14610659578063a0712d681461069657610251565b806324600fc3116101d257806356b48d631161019657806356b48d63146104cc57806356b4f673146104f55780636352211e1461052057806370a082311461055d578063715018a61461059a5780637304ff6c146105b157610251565b806324600fc31461041a5780633667c548146104315780633f6dc78f1461045c57806342842e0e14610485578063507862d1146104a157610251565b80631313c558116102195780631313c558146103425780631422374f1461036b57806318160ddd146103965780631d985778146103c157806323b872dd146103fe57610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610969565b6040516102789190612da7565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612e2e565b61097c565b6040516102b59190612da7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a0e565b6040516102e09190612eeb565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612f43565b610aa0565b60405161031d9190612fb1565b60405180910390f35b610340600480360381019061033b9190612ff8565b610b1f565b005b34801561034e57600080fd5b5061036960048036038101906103649190613180565b610c63565b005b34801561037757600080fd5b50610380610c85565b60405161038d91906131d8565b60405180910390f35b3480156103a257600080fd5b506103ab610c8b565b6040516103b891906131d8565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906131f3565b610ca2565b6040516103f591906131d8565b60405180910390f35b61041860048036038101906104139190613220565b610cba565b005b34801561042657600080fd5b5061042f610dc6565b005b34801561043d57600080fd5b50610446610ed2565b60405161045391906131d8565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612f43565b610ed8565b005b61049f600480360381019061049a9190613220565b610eea565b005b3480156104ad57600080fd5b506104b6610ff6565b6040516104c39190612eeb565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613328565b611084565b005b34801561050157600080fd5b5061050a61109f565b6040516105179190612eeb565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612f43565b61112d565b6040516105549190612fb1565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906131f3565b61113f565b60405161059191906131d8565b60405180910390f35b3480156105a657600080fd5b506105af6111f7565b005b3480156105bd57600080fd5b506105d860048036038101906105d3919061339d565b61120b565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612f43565b611241565b005b34801561060f57600080fd5b50610618611253565b6040516106259190612fb1565b60405180910390f35b34801561063a57600080fd5b5061064361127c565b6040516106509190612eeb565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190612f43565b61130e565b60405161068d9190612fb1565b60405180910390f35b6106b060048036038101906106ab9190612f43565b61134d565b005b3480156106be57600080fd5b506106d960048036038101906106d49190612f43565b611754565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906133f9565b611766565b005b34801561071057600080fd5b50610719611871565b005b34801561072757600080fd5b506107306118a5565b60405161073d9190612da7565b60405180910390f35b610760600480360381019061075b91906134da565b6118b8565b005b34801561076e57600080fd5b5061078960048036038101906107849190612f43565b6119c6565b6040516107969190612eeb565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190612f43565b611aa2565b005b3480156107d457600080fd5b506107ef60048036038101906107ea919061355d565b611ab4565b005b3480156107fd57600080fd5b5061081860048036038101906108139190612f43565b611b21565b005b34801561082657600080fd5b5061082f611b33565b60405161083c91906131d8565b60405180910390f35b34801561085157600080fd5b5061085a611b39565b6040516108679190612eeb565b60405180910390f35b34801561087c57600080fd5b50610885611bc7565b60405161089291906131d8565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190612f43565b611bcd565b6040516108cf91906131d8565b60405180910390f35b3480156108e457600080fd5b506108ed611ced565b6040516108fa9190612eeb565b60405180910390f35b34801561090f57600080fd5b5061092a6004803603810190610925919061359d565b611d7f565b6040516109379190612da7565b60405180910390f35b34801561094c57600080fd5b50610967600480360381019061096291906131f3565b611e13565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a075750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a1d9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a499061360c565b8015610a965780601f10610a6b57610100808354040283529160200191610a96565b820191906000526020600020905b815481529060010190602001808311610a7957829003601f168201915b5050505050905090565b6000610aab82611e96565b610ae1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2a8261112d565b90508073ffffffffffffffffffffffffffffffffffffffff16610b4b611ef5565b73ffffffffffffffffffffffffffffffffffffffff1614610bae57610b7781610b72611ef5565b611d7f565b610bad576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610c6b611efd565b8060129080519060200190610c81929190612ce5565b5050565b60115481565b6000610c95611f7b565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610db6576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d3192919061363d565b6020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d74919061367b565b610db557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610dac9190612fb1565b60405180910390fd5b5b610dc1838383611f80565b505050565b610dce611efd565b600260095403610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906136f4565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e4190613745565b60006040518083038185875af1925050503d8060008114610e7e576040519150601f19603f3d011682016040523d82523d6000602084013e610e83565b606091505b5050905080610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe906137a6565b60405180910390fd5b506001600981905550565b60135481565b610ee0611efd565b8060138190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe6576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f6192919061363d565b6020604051808303816000875af1158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa4919061367b565b610fe557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdc9190612fb1565b60405180910390fd5b5b610ff18383836122a2565b505050565b600d80546110039061360c565b80601f016020809104026020016040519081016040528092919081815260200182805461102f9061360c565b801561107c5780601f106110515761010080835404028352916020019161107c565b820191906000526020600020905b81548152906001019060200180831161105f57829003601f168201915b505050505081565b61108c611efd565b80600a908161109b9190613972565b5050565b600a80546110ac9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546110d89061360c565b80156111255780601f106110fa57610100808354040283529160200191611125565b820191906000526020600020905b81548152906001019060200180831161110857829003601f168201915b505050505081565b6000611138826122c2565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a6576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111ff611efd565b611209600061238e565b565b611213611efd565b80600e90816112229190613972565b5081600c60006101000a81548160ff0219169083151502179055505050565b611249611efd565b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461128b9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546112b79061360c565b80156113045780601f106112d957610100808354040283529160200191611304565b820191906000526020600020905b8154815290600101906020018083116112e757829003601f168201915b5050505050905090565b6012818154811061131e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613a90565b60405180910390fd5b600260095403611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906136f4565b60405180910390fd5b6002600981905550600f60009054906101000a900460ff16611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90613afc565b60405180910390fd5b60105481611463610c8b565b61146d9190613b4b565b11156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613bcb565b60405180910390fd5b601154816114bb3361113f565b6114c59190613b4b565b1115611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613c37565b60405180910390fd5b6000611510612452565b905061151c828261254d565b34101561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ca3565b60405180910390fd5b611568338361265f565b801561165d57601554600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836115bc9190613b4b565b1161161157600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261160c9190613b4b565b611615565b6015545b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611748565b601654600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836116ab9190613b4b565b1161170057600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826116fb9190613b4b565b611704565b6016545b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50600160098190555050565b61175c611efd565b8060118190555050565b8060086000611773611ef5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611820611ef5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118659190612da7565b60405180910390a35050565b611879611efd565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119b4576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161192f92919061363d565b6020604051808303816000875af115801561194e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611972919061367b565b6119b357336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119aa9190612fb1565b60405180910390fd5b5b6119c08484848461267d565b50505050565b6060600c60009054906101000a900460ff1615611a0f57600e6119e8836126f0565b6040516020016119f9929190613d82565b6040516020818303038152906040529050611a9d565b600d8054611a1c9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a489061360c565b8015611a955780601f10611a6a57610100808354040283529160200191611a95565b820191906000526020600020905b815481529060010190602001808311611a7857829003601f168201915b505050505090505b919050565b611aaa611efd565b8060168190555050565b611abc611efd565b60105482611ac8610c8b565b611ad29190613b4b565b1115611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613df2565b60405180910390fd5b611b1d818361265f565b5050565b611b29611efd565b8060148190555050565b60105481565b600e8054611b469061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b729061360c565b8015611bbf5780601f10611b9457610100808354040283529160200191611bbf565b820191906000526020600020905b815481529060010190602001808311611ba257829003601f168201915b505050505081565b60145481565b600080611bd8612452565b90508015611c66576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601554611c2f9190613e12565b905083811115611c4457600092505050611ce8565b8084611c509190613e12565b601354611c5d9190613e46565b92505050611ce8565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654611cb59190613e12565b905083811115611cca57600092505050611ce8565b8084611cd69190613e12565b601454611ce39190613e46565b925050505b919050565b6060600a8054611cfc9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d289061360c565b8015611d755780601f10611d4a57610100808354040283529160200191611d75565b820191906000526020600020905b815481529060010190602001808311611d5857829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1b611efd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613efa565b60405180910390fd5b611e938161238e565b50565b600081611ea1611f7b565b11158015611eb0575060015482105b8015611eee575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b611f05612850565b73ffffffffffffffffffffffffffffffffffffffff16611f23611253565b73ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090613f66565b60405180910390fd5b565b600090565b6000611f8b826122c2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ffe84612858565b91509150612014818761200f611ef5565b61287f565b6120605761202986612024611ef5565b611d7f565b61205f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036120c6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120d386868660016128c3565b80156120de57600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506121ac856121888888876128c9565b7c0200000000000000000000000000000000000000000000000000000000176128f1565b600560008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612232576000600185019050600060056000838152602001908152602001600020540361223057600154811461222f578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229a868686600161291c565b505050505050565b6122bd838383604051806020016040528060008152506118b8565b505050565b600080829050806122d1611f7b565b11612357576001548110156123565760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612354575b6000810361234a576005600083600190039350838152602001908152602001600020549050612320565b8092505050612389565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b6012805490508110156125455760006012828154811061247f5761247e613f86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016124e29190612fb1565b602060405180830381865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613fca565b11156125325760019150612545565b808061253d90613ff7565b91505061245c565b508091505090565b600081156125d9576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546015546125a49190613e12565b9050838111156125b8576000915050612659565b80846125c49190613e12565b6013546125d19190613e46565b915050612659565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016546126289190613e12565b90508381111561263c576000915050612659565b80846126489190613e12565b6014546126559190613e46565b9150505b92915050565b612679828260405180602001604052806000815250612922565b5050565b612688848484610cba565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126ea576126b3848484846129c0565b6126e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612737576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061284b565b600082905060005b6000821461276957808061275290613ff7565b915050600a82612762919061406e565b915061273f565b60008167ffffffffffffffff8111156127855761278461303d565b5b6040519080825280601f01601f1916602001820160405280156127b75781602001600182028036833780820191505090505b5090505b60008514612844576001826127d09190613e12565b9150600a856127df919061409f565b60306127eb9190613b4b565b60f81b81838151811061280157612800613f86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561283d919061406e565b94506127bb565b8093505050505b919050565b600033905090565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86128e0868684612b10565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61292c8383612b19565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129bb5760006001549050600083820390505b61296d60008683806001019450866129c0565b6129a3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061295a5781600154146129b857600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e6611ef5565b8786866040518563ffffffff1660e01b8152600401612a089493929190614125565b6020604051808303816000875af1925050508015612a4457506040513d601f19601f82011682018060405250810190612a419190614186565b60015b612abd573d8060008114612a74576040519150601f19603f3d011682016040523d82523d6000602084013e612a79565b606091505b506000815103612ab5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612b5a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b6760008483856128c3565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612bde83612bcf60008660006128c9565b612bd885612cd5565b176128f1565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c7f57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612c44565b5060008203612cba576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612cd0600084838561291c565b505050565b60006001821460e11b9050919050565b828054828255906000526020600020908101928215612d5e579160200282015b82811115612d5d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612d05565b5b509050612d6b9190612d6f565b5090565b5b80821115612d88576000816000905550600101612d70565b5090565b60008115159050919050565b612da181612d8c565b82525050565b6000602082019050612dbc6000830184612d98565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0b81612dd6565b8114612e1657600080fd5b50565b600081359050612e2881612e02565b92915050565b600060208284031215612e4457612e43612dcc565b5b6000612e5284828501612e19565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e95578082015181840152602081019050612e7a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ebd82612e5b565b612ec78185612e66565b9350612ed7818560208601612e77565b612ee081612ea1565b840191505092915050565b60006020820190508181036000830152612f058184612eb2565b905092915050565b6000819050919050565b612f2081612f0d565b8114612f2b57600080fd5b50565b600081359050612f3d81612f17565b92915050565b600060208284031215612f5957612f58612dcc565b5b6000612f6784828501612f2e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f9b82612f70565b9050919050565b612fab81612f90565b82525050565b6000602082019050612fc66000830184612fa2565b92915050565b612fd581612f90565b8114612fe057600080fd5b50565b600081359050612ff281612fcc565b92915050565b6000806040838503121561300f5761300e612dcc565b5b600061301d85828601612fe3565b925050602061302e85828601612f2e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61307582612ea1565b810181811067ffffffffffffffff821117156130945761309361303d565b5b80604052505050565b60006130a7612dc2565b90506130b3828261306c565b919050565b600067ffffffffffffffff8211156130d3576130d261303d565b5b602082029050602081019050919050565b600080fd5b60006130fc6130f7846130b8565b61309d565b9050808382526020820190506020840283018581111561311f5761311e6130e4565b5b835b8181101561314857806131348882612fe3565b845260208401935050602081019050613121565b5050509392505050565b600082601f83011261316757613166613038565b5b81356131778482602086016130e9565b91505092915050565b60006020828403121561319657613195612dcc565b5b600082013567ffffffffffffffff8111156131b4576131b3612dd1565b5b6131c084828501613152565b91505092915050565b6131d281612f0d565b82525050565b60006020820190506131ed60008301846131c9565b92915050565b60006020828403121561320957613208612dcc565b5b600061321784828501612fe3565b91505092915050565b60008060006060848603121561323957613238612dcc565b5b600061324786828701612fe3565b935050602061325886828701612fe3565b925050604061326986828701612f2e565b9150509250925092565b600080fd5b600067ffffffffffffffff8211156132935761329261303d565b5b61329c82612ea1565b9050602081019050919050565b82818337600083830152505050565b60006132cb6132c684613278565b61309d565b9050828152602081018484840111156132e7576132e6613273565b5b6132f28482856132a9565b509392505050565b600082601f83011261330f5761330e613038565b5b813561331f8482602086016132b8565b91505092915050565b60006020828403121561333e5761333d612dcc565b5b600082013567ffffffffffffffff81111561335c5761335b612dd1565b5b613368848285016132fa565b91505092915050565b61337a81612d8c565b811461338557600080fd5b50565b60008135905061339781613371565b92915050565b600080604083850312156133b4576133b3612dcc565b5b60006133c285828601613388565b925050602083013567ffffffffffffffff8111156133e3576133e2612dd1565b5b6133ef858286016132fa565b9150509250929050565b600080604083850312156134105761340f612dcc565b5b600061341e85828601612fe3565b925050602061342f85828601613388565b9150509250929050565b600067ffffffffffffffff8211156134545761345361303d565b5b61345d82612ea1565b9050602081019050919050565b600061347d61347884613439565b61309d565b90508281526020810184848401111561349957613498613273565b5b6134a48482856132a9565b509392505050565b600082601f8301126134c1576134c0613038565b5b81356134d184826020860161346a565b91505092915050565b600080600080608085870312156134f4576134f3612dcc565b5b600061350287828801612fe3565b945050602061351387828801612fe3565b935050604061352487828801612f2e565b925050606085013567ffffffffffffffff81111561354557613544612dd1565b5b613551878288016134ac565b91505092959194509250565b6000806040838503121561357457613573612dcc565b5b600061358285828601612f2e565b925050602061359385828601612fe3565b9150509250929050565b600080604083850312156135b4576135b3612dcc565b5b60006135c285828601612fe3565b92505060206135d385828601612fe3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061362457607f821691505b602082108103613637576136366135dd565b5b50919050565b60006040820190506136526000830185612fa2565b61365f6020830184612fa2565b9392505050565b60008151905061367581613371565b92915050565b60006020828403121561369157613690612dcc565b5b600061369f84828501613666565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136de601f83612e66565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b600081905092915050565b50565b600061372f600083613714565b915061373a8261371f565b600082019050919050565b600061375082613722565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613790601083612e66565b915061379b8261375a565b602082019050919050565b600060208201905081810360008301526137bf81613783565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137eb565b61383286836137eb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061386f61386a61386584612f0d565b61384a565b612f0d565b9050919050565b6000819050919050565b61388983613854565b61389d61389582613876565b8484546137f8565b825550505050565b600090565b6138b26138a5565b6138bd818484613880565b505050565b5b818110156138e1576138d66000826138aa565b6001810190506138c3565b5050565b601f821115613926576138f7816137c6565b613900846137db565b8101602085101561390f578190505b61392361391b856137db565b8301826138c2565b50505b505050565b600082821c905092915050565b60006139496000198460080261392b565b1980831691505092915050565b60006139628383613938565b9150826002028217905092915050565b61397b82612e5b565b67ffffffffffffffff8111156139945761399361303d565b5b61399e825461360c565b6139a98282856138e5565b600060209050601f8311600181146139dc57600084156139ca578287015190505b6139d48582613956565b865550613a3c565b601f1984166139ea866137c6565b60005b82811015613a12578489015182556001820191506020850194506020810190506139ed565b86831015613a2f5784890151613a2b601f891682613938565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a7a601e83612e66565b9150613a8582613a44565b602082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613ae6601383612e66565b9150613af182613ab0565b602082019050919050565b60006020820190508181036000830152613b1581613ad9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b5682612f0d565b9150613b6183612f0d565b9250828201905080821115613b7957613b78613b1c565b5b92915050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613bb5600d83612e66565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69740000000000000000600082015250565b6000613c21601883612e66565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e6579210000000000000000000000600082015250565b6000613c8d601583612e66565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b9050919050565b600081905092915050565b60008154613cdb8161360c565b613ce58186613cc3565b94506001821660008114613d005760018114613d1557613d48565b60ff1983168652811515820286019350613d48565b613d1e856137c6565b60005b83811015613d4057815481890152600182019150602081019050613d21565b838801955050505b50505092915050565b6000613d5c82612e5b565b613d668185613cc3565b9350613d76818560208601612e77565b80840191505092915050565b6000613d8e8285613cce565b9150613d9a8284613d51565b91508190509392505050565b7f4e6f206d6f7265204d656f775a756b6920696e2073746f636b21000000000000600082015250565b6000613ddc601a83612e66565b9150613de782613da6565b602082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b6000613e1d82612f0d565b9150613e2883612f0d565b9250828203905081811115613e4057613e3f613b1c565b5b92915050565b6000613e5182612f0d565b9150613e5c83612f0d565b9250828202613e6a81612f0d565b91508282048414831517613e8157613e80613b1c565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee4602683612e66565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f50602083612e66565b9150613f5b82613f1a565b602082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613fc481612f17565b92915050565b600060208284031215613fe057613fdf612dcc565b5b6000613fee84828501613fb5565b91505092915050565b600061400282612f0d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403457614033613b1c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061407982612f0d565b915061408483612f0d565b9250826140945761409361403f565b5b828204905092915050565b60006140aa82612f0d565b91506140b583612f0d565b9250826140c5576140c461403f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140f7826140d0565b61410181856140db565b9350614111818560208601612e77565b61411a81612ea1565b840191505092915050565b600060808201905061413a6000830187612fa2565b6141476020830186612fa2565b61415460408301856131c9565b818103606083015261416681846140ec565b905095945050505050565b60008151905061418081612e02565b92915050565b60006020828403121561419c5761419b612dcc565b5b60006141aa84828501614171565b9150509291505056fea26469706673582212206b4ae03e1607ac5cad9f61a8ddcde1316e18b04a8ea5e2a45ac172ad87d5208364736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102515760003560e01c806378728f2611610139578063c87b56dd116100b6578063dbddb26a1161007a578063dbddb26a14610845578063e13bc8eb14610870578063e75722301461089b578063e8a3d485146108d8578063e985e9c514610903578063f2fde38b1461094057610251565b8063c87b56dd14610762578063ccdc17671461079f578063d5392564146107c8578063d7c3c617146107f1578063d8258d951461081a57610251565b8063a1db246e116100fd578063a1db246e146106b2578063a22cb465146106db578063a4cdd71914610704578063a76a95871461071b578063b88d4fde1461074657610251565b806378728f26146105da5780638da5cb5b1461060357806395d89b411461062e5780639e6b26ba14610659578063a0712d681461069657610251565b806324600fc3116101d257806356b48d631161019657806356b48d63146104cc57806356b4f673146104f55780636352211e1461052057806370a082311461055d578063715018a61461059a5780637304ff6c146105b157610251565b806324600fc31461041a5780633667c548146104315780633f6dc78f1461045c57806342842e0e14610485578063507862d1146104a157610251565b80631313c558116102195780631313c558146103425780631422374f1461036b57806318160ddd146103965780631d985778146103c157806323b872dd146103fe57610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610969565b6040516102789190612da7565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612e2e565b61097c565b6040516102b59190612da7565b60405180910390f35b3480156102ca57600080fd5b506102d3610a0e565b6040516102e09190612eeb565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612f43565b610aa0565b60405161031d9190612fb1565b60405180910390f35b610340600480360381019061033b9190612ff8565b610b1f565b005b34801561034e57600080fd5b5061036960048036038101906103649190613180565b610c63565b005b34801561037757600080fd5b50610380610c85565b60405161038d91906131d8565b60405180910390f35b3480156103a257600080fd5b506103ab610c8b565b6040516103b891906131d8565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906131f3565b610ca2565b6040516103f591906131d8565b60405180910390f35b61041860048036038101906104139190613220565b610cba565b005b34801561042657600080fd5b5061042f610dc6565b005b34801561043d57600080fd5b50610446610ed2565b60405161045391906131d8565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612f43565b610ed8565b005b61049f600480360381019061049a9190613220565b610eea565b005b3480156104ad57600080fd5b506104b6610ff6565b6040516104c39190612eeb565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613328565b611084565b005b34801561050157600080fd5b5061050a61109f565b6040516105179190612eeb565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612f43565b61112d565b6040516105549190612fb1565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906131f3565b61113f565b60405161059191906131d8565b60405180910390f35b3480156105a657600080fd5b506105af6111f7565b005b3480156105bd57600080fd5b506105d860048036038101906105d3919061339d565b61120b565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612f43565b611241565b005b34801561060f57600080fd5b50610618611253565b6040516106259190612fb1565b60405180910390f35b34801561063a57600080fd5b5061064361127c565b6040516106509190612eeb565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190612f43565b61130e565b60405161068d9190612fb1565b60405180910390f35b6106b060048036038101906106ab9190612f43565b61134d565b005b3480156106be57600080fd5b506106d960048036038101906106d49190612f43565b611754565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906133f9565b611766565b005b34801561071057600080fd5b50610719611871565b005b34801561072757600080fd5b506107306118a5565b60405161073d9190612da7565b60405180910390f35b610760600480360381019061075b91906134da565b6118b8565b005b34801561076e57600080fd5b5061078960048036038101906107849190612f43565b6119c6565b6040516107969190612eeb565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c19190612f43565b611aa2565b005b3480156107d457600080fd5b506107ef60048036038101906107ea919061355d565b611ab4565b005b3480156107fd57600080fd5b5061081860048036038101906108139190612f43565b611b21565b005b34801561082657600080fd5b5061082f611b33565b60405161083c91906131d8565b60405180910390f35b34801561085157600080fd5b5061085a611b39565b6040516108679190612eeb565b60405180910390f35b34801561087c57600080fd5b50610885611bc7565b60405161089291906131d8565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190612f43565b611bcd565b6040516108cf91906131d8565b60405180910390f35b3480156108e457600080fd5b506108ed611ced565b6040516108fa9190612eeb565b60405180910390f35b34801561090f57600080fd5b5061092a6004803603810190610925919061359d565b611d7f565b6040516109379190612da7565b60405180910390f35b34801561094c57600080fd5b50610967600480360381019061096291906131f3565b611e13565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a075750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a1d9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a499061360c565b8015610a965780601f10610a6b57610100808354040283529160200191610a96565b820191906000526020600020905b815481529060010190602001808311610a7957829003601f168201915b5050505050905090565b6000610aab82611e96565b610ae1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2a8261112d565b90508073ffffffffffffffffffffffffffffffffffffffff16610b4b611ef5565b73ffffffffffffffffffffffffffffffffffffffff1614610bae57610b7781610b72611ef5565b611d7f565b610bad576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610c6b611efd565b8060129080519060200190610c81929190612ce5565b5050565b60115481565b6000610c95611f7b565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610db6576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d3192919061363d565b6020604051808303816000875af1158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d74919061367b565b610db557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610dac9190612fb1565b60405180910390fd5b5b610dc1838383611f80565b505050565b610dce611efd565b600260095403610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a906136f4565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e4190613745565b60006040518083038185875af1925050503d8060008114610e7e576040519150601f19603f3d011682016040523d82523d6000602084013e610e83565b606091505b5050905080610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe906137a6565b60405180910390fd5b506001600981905550565b60135481565b610ee0611efd565b8060138190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fe6576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f6192919061363d565b6020604051808303816000875af1158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa4919061367b565b610fe557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fdc9190612fb1565b60405180910390fd5b5b610ff18383836122a2565b505050565b600d80546110039061360c565b80601f016020809104026020016040519081016040528092919081815260200182805461102f9061360c565b801561107c5780601f106110515761010080835404028352916020019161107c565b820191906000526020600020905b81548152906001019060200180831161105f57829003601f168201915b505050505081565b61108c611efd565b80600a908161109b9190613972565b5050565b600a80546110ac9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546110d89061360c565b80156111255780601f106110fa57610100808354040283529160200191611125565b820191906000526020600020905b81548152906001019060200180831161110857829003601f168201915b505050505081565b6000611138826122c2565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a6576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111ff611efd565b611209600061238e565b565b611213611efd565b80600e90816112229190613972565b5081600c60006101000a81548160ff0219169083151502179055505050565b611249611efd565b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461128b9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546112b79061360c565b80156113045780601f106112d957610100808354040283529160200191611304565b820191906000526020600020905b8154815290600101906020018083116112e757829003601f168201915b5050505050905090565b6012818154811061131e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613a90565b60405180910390fd5b600260095403611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906136f4565b60405180910390fd5b6002600981905550600f60009054906101000a900460ff16611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90613afc565b60405180910390fd5b60105481611463610c8b565b61146d9190613b4b565b11156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613bcb565b60405180910390fd5b601154816114bb3361113f565b6114c59190613b4b565b1115611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613c37565b60405180910390fd5b6000611510612452565b905061151c828261254d565b34101561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613ca3565b60405180910390fd5b611568338361265f565b801561165d57601554600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836115bc9190613b4b565b1161161157600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261160c9190613b4b565b611615565b6015545b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611748565b601654600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836116ab9190613b4b565b1161170057600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826116fb9190613b4b565b611704565b6016545b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50600160098190555050565b61175c611efd565b8060118190555050565b8060086000611773611ef5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611820611ef5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118659190612da7565b60405180910390a35050565b611879611efd565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119b4576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161192f92919061363d565b6020604051808303816000875af115801561194e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611972919061367b565b6119b357336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119aa9190612fb1565b60405180910390fd5b5b6119c08484848461267d565b50505050565b6060600c60009054906101000a900460ff1615611a0f57600e6119e8836126f0565b6040516020016119f9929190613d82565b6040516020818303038152906040529050611a9d565b600d8054611a1c9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a489061360c565b8015611a955780601f10611a6a57610100808354040283529160200191611a95565b820191906000526020600020905b815481529060010190602001808311611a7857829003601f168201915b505050505090505b919050565b611aaa611efd565b8060168190555050565b611abc611efd565b60105482611ac8610c8b565b611ad29190613b4b565b1115611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613df2565b60405180910390fd5b611b1d818361265f565b5050565b611b29611efd565b8060148190555050565b60105481565b600e8054611b469061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b729061360c565b8015611bbf5780601f10611b9457610100808354040283529160200191611bbf565b820191906000526020600020905b815481529060010190602001808311611ba257829003601f168201915b505050505081565b60145481565b600080611bd8612452565b90508015611c66576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601554611c2f9190613e12565b905083811115611c4457600092505050611ce8565b8084611c509190613e12565b601354611c5d9190613e46565b92505050611ce8565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654611cb59190613e12565b905083811115611cca57600092505050611ce8565b8084611cd69190613e12565b601454611ce39190613e46565b925050505b919050565b6060600a8054611cfc9061360c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d289061360c565b8015611d755780601f10611d4a57610100808354040283529160200191611d75565b820191906000526020600020905b815481529060010190602001808311611d5857829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1b611efd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613efa565b60405180910390fd5b611e938161238e565b50565b600081611ea1611f7b565b11158015611eb0575060015482105b8015611eee575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b611f05612850565b73ffffffffffffffffffffffffffffffffffffffff16611f23611253565b73ffffffffffffffffffffffffffffffffffffffff1614611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090613f66565b60405180910390fd5b565b600090565b6000611f8b826122c2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ffe84612858565b91509150612014818761200f611ef5565b61287f565b6120605761202986612024611ef5565b611d7f565b61205f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036120c6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120d386868660016128c3565b80156120de57600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506121ac856121888888876128c9565b7c0200000000000000000000000000000000000000000000000000000000176128f1565b600560008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603612232576000600185019050600060056000838152602001908152602001600020540361223057600154811461222f578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229a868686600161291c565b505050505050565b6122bd838383604051806020016040528060008152506118b8565b505050565b600080829050806122d1611f7b565b11612357576001548110156123565760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612354575b6000810361234a576005600083600190039350838152602001908152602001600020549050612320565b8092505050612389565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b6012805490508110156125455760006012828154811061247f5761247e613f86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016124e29190612fb1565b602060405180830381865afa1580156124ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125239190613fca565b11156125325760019150612545565b808061253d90613ff7565b91505061245c565b508091505090565b600081156125d9576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546015546125a49190613e12565b9050838111156125b8576000915050612659565b80846125c49190613e12565b6013546125d19190613e46565b915050612659565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016546126289190613e12565b90508381111561263c576000915050612659565b80846126489190613e12565b6014546126559190613e46565b9150505b92915050565b612679828260405180602001604052806000815250612922565b5050565b612688848484610cba565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126ea576126b3848484846129c0565b6126e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612737576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061284b565b600082905060005b6000821461276957808061275290613ff7565b915050600a82612762919061406e565b915061273f565b60008167ffffffffffffffff8111156127855761278461303d565b5b6040519080825280601f01601f1916602001820160405280156127b75781602001600182028036833780820191505090505b5090505b60008514612844576001826127d09190613e12565b9150600a856127df919061409f565b60306127eb9190613b4b565b60f81b81838151811061280157612800613f86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561283d919061406e565b94506127bb565b8093505050505b919050565b600033905090565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e86128e0868684612b10565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b61292c8383612b19565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129bb5760006001549050600083820390505b61296d60008683806001019450866129c0565b6129a3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061295a5781600154146129b857600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e6611ef5565b8786866040518563ffffffff1660e01b8152600401612a089493929190614125565b6020604051808303816000875af1925050508015612a4457506040513d601f19601f82011682018060405250810190612a419190614186565b60015b612abd573d8060008114612a74576040519150601f19603f3d011682016040523d82523d6000602084013e612a79565b606091505b506000815103612ab5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612b5a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b6760008483856128c3565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612bde83612bcf60008660006128c9565b612bd885612cd5565b176128f1565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c7f57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612c44565b5060008203612cba576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612cd0600084838561291c565b505050565b60006001821460e11b9050919050565b828054828255906000526020600020908101928215612d5e579160200282015b82811115612d5d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612d05565b5b509050612d6b9190612d6f565b5090565b5b80821115612d88576000816000905550600101612d70565b5090565b60008115159050919050565b612da181612d8c565b82525050565b6000602082019050612dbc6000830184612d98565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0b81612dd6565b8114612e1657600080fd5b50565b600081359050612e2881612e02565b92915050565b600060208284031215612e4457612e43612dcc565b5b6000612e5284828501612e19565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e95578082015181840152602081019050612e7a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ebd82612e5b565b612ec78185612e66565b9350612ed7818560208601612e77565b612ee081612ea1565b840191505092915050565b60006020820190508181036000830152612f058184612eb2565b905092915050565b6000819050919050565b612f2081612f0d565b8114612f2b57600080fd5b50565b600081359050612f3d81612f17565b92915050565b600060208284031215612f5957612f58612dcc565b5b6000612f6784828501612f2e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f9b82612f70565b9050919050565b612fab81612f90565b82525050565b6000602082019050612fc66000830184612fa2565b92915050565b612fd581612f90565b8114612fe057600080fd5b50565b600081359050612ff281612fcc565b92915050565b6000806040838503121561300f5761300e612dcc565b5b600061301d85828601612fe3565b925050602061302e85828601612f2e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61307582612ea1565b810181811067ffffffffffffffff821117156130945761309361303d565b5b80604052505050565b60006130a7612dc2565b90506130b3828261306c565b919050565b600067ffffffffffffffff8211156130d3576130d261303d565b5b602082029050602081019050919050565b600080fd5b60006130fc6130f7846130b8565b61309d565b9050808382526020820190506020840283018581111561311f5761311e6130e4565b5b835b8181101561314857806131348882612fe3565b845260208401935050602081019050613121565b5050509392505050565b600082601f83011261316757613166613038565b5b81356131778482602086016130e9565b91505092915050565b60006020828403121561319657613195612dcc565b5b600082013567ffffffffffffffff8111156131b4576131b3612dd1565b5b6131c084828501613152565b91505092915050565b6131d281612f0d565b82525050565b60006020820190506131ed60008301846131c9565b92915050565b60006020828403121561320957613208612dcc565b5b600061321784828501612fe3565b91505092915050565b60008060006060848603121561323957613238612dcc565b5b600061324786828701612fe3565b935050602061325886828701612fe3565b925050604061326986828701612f2e565b9150509250925092565b600080fd5b600067ffffffffffffffff8211156132935761329261303d565b5b61329c82612ea1565b9050602081019050919050565b82818337600083830152505050565b60006132cb6132c684613278565b61309d565b9050828152602081018484840111156132e7576132e6613273565b5b6132f28482856132a9565b509392505050565b600082601f83011261330f5761330e613038565b5b813561331f8482602086016132b8565b91505092915050565b60006020828403121561333e5761333d612dcc565b5b600082013567ffffffffffffffff81111561335c5761335b612dd1565b5b613368848285016132fa565b91505092915050565b61337a81612d8c565b811461338557600080fd5b50565b60008135905061339781613371565b92915050565b600080604083850312156133b4576133b3612dcc565b5b60006133c285828601613388565b925050602083013567ffffffffffffffff8111156133e3576133e2612dd1565b5b6133ef858286016132fa565b9150509250929050565b600080604083850312156134105761340f612dcc565b5b600061341e85828601612fe3565b925050602061342f85828601613388565b9150509250929050565b600067ffffffffffffffff8211156134545761345361303d565b5b61345d82612ea1565b9050602081019050919050565b600061347d61347884613439565b61309d565b90508281526020810184848401111561349957613498613273565b5b6134a48482856132a9565b509392505050565b600082601f8301126134c1576134c0613038565b5b81356134d184826020860161346a565b91505092915050565b600080600080608085870312156134f4576134f3612dcc565b5b600061350287828801612fe3565b945050602061351387828801612fe3565b935050604061352487828801612f2e565b925050606085013567ffffffffffffffff81111561354557613544612dd1565b5b613551878288016134ac565b91505092959194509250565b6000806040838503121561357457613573612dcc565b5b600061358285828601612f2e565b925050602061359385828601612fe3565b9150509250929050565b600080604083850312156135b4576135b3612dcc565b5b60006135c285828601612fe3565b92505060206135d385828601612fe3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061362457607f821691505b602082108103613637576136366135dd565b5b50919050565b60006040820190506136526000830185612fa2565b61365f6020830184612fa2565b9392505050565b60008151905061367581613371565b92915050565b60006020828403121561369157613690612dcc565b5b600061369f84828501613666565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006136de601f83612e66565b91506136e9826136a8565b602082019050919050565b6000602082019050818103600083015261370d816136d1565b9050919050565b600081905092915050565b50565b600061372f600083613714565b915061373a8261371f565b600082019050919050565b600061375082613722565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613790601083612e66565b915061379b8261375a565b602082019050919050565b600060208201905081810360008301526137bf81613783565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137eb565b61383286836137eb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061386f61386a61386584612f0d565b61384a565b612f0d565b9050919050565b6000819050919050565b61388983613854565b61389d61389582613876565b8484546137f8565b825550505050565b600090565b6138b26138a5565b6138bd818484613880565b505050565b5b818110156138e1576138d66000826138aa565b6001810190506138c3565b5050565b601f821115613926576138f7816137c6565b613900846137db565b8101602085101561390f578190505b61392361391b856137db565b8301826138c2565b50505b505050565b600082821c905092915050565b60006139496000198460080261392b565b1980831691505092915050565b60006139628383613938565b9150826002028217905092915050565b61397b82612e5b565b67ffffffffffffffff8111156139945761399361303d565b5b61399e825461360c565b6139a98282856138e5565b600060209050601f8311600181146139dc57600084156139ca578287015190505b6139d48582613956565b865550613a3c565b601f1984166139ea866137c6565b60005b82811015613a12578489015182556001820191506020850194506020810190506139ed565b86831015613a2f5784890151613a2b601f891682613938565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a7a601e83612e66565b9150613a8582613a44565b602082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b6000613ae6601383612e66565b9150613af182613ab0565b602082019050919050565b60006020820190508181036000830152613b1581613ad9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b5682612f0d565b9150613b6183612f0d565b9250828201905080821115613b7957613b78613b1c565b5b92915050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613bb5600d83612e66565b9150613bc082613b7f565b602082019050919050565b60006020820190508181036000830152613be481613ba8565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69740000000000000000600082015250565b6000613c21601883612e66565b9150613c2c82613beb565b602082019050919050565b60006020820190508181036000830152613c5081613c14565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e6579210000000000000000000000600082015250565b6000613c8d601583612e66565b9150613c9882613c57565b602082019050919050565b60006020820190508181036000830152613cbc81613c80565b9050919050565b600081905092915050565b60008154613cdb8161360c565b613ce58186613cc3565b94506001821660008114613d005760018114613d1557613d48565b60ff1983168652811515820286019350613d48565b613d1e856137c6565b60005b83811015613d4057815481890152600182019150602081019050613d21565b838801955050505b50505092915050565b6000613d5c82612e5b565b613d668185613cc3565b9350613d76818560208601612e77565b80840191505092915050565b6000613d8e8285613cce565b9150613d9a8284613d51565b91508190509392505050565b7f4e6f206d6f7265204d656f775a756b6920696e2073746f636b21000000000000600082015250565b6000613ddc601a83612e66565b9150613de782613da6565b602082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b6000613e1d82612f0d565b9150613e2883612f0d565b9250828203905081811115613e4057613e3f613b1c565b5b92915050565b6000613e5182612f0d565b9150613e5c83612f0d565b9250828202613e6a81612f0d565b91508282048414831517613e8157613e80613b1c565b5b5092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee4602683612e66565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f50602083612e66565b9150613f5b82613f1a565b602082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613fc481612f17565b92915050565b600060208284031215613fe057613fdf612dcc565b5b6000613fee84828501613fb5565b91505092915050565b600061400282612f0d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403457614033613b1c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061407982612f0d565b915061408483612f0d565b9250826140945761409361403f565b5b828204905092915050565b60006140aa82612f0d565b91506140b583612f0d565b9250826140c5576140c461403f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140f7826140d0565b61410181856140db565b9350614111818560208601612e77565b61411a81612ea1565b840191505092915050565b600060808201905061413a6000830187612fa2565b6141476020830186612fa2565b61415460408301856131c9565b818103606083015261416681846140ec565b905095945050505050565b60008151905061418081612e02565b92915050565b60006020828403121561419c5761419b612dcc565b5b60006141aa84828501614171565b9150509291505056fea26469706673582212206b4ae03e1607ac5cad9f61a8ddcde1316e18b04a8ea5e2a45ac172ad87d5208364736f6c63430008120033

Deployed Bytecode Sourcemap

36354:6069:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36631:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14527:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14779:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18355:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17939:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40519:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36719:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12890:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36478:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41465:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40766:191;;;;;;;;;;;;;:::i;:::-;;37134:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40422:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41648:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36557:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41227:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36440:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15427:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13355:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;885:103;;;;;;;;;;;;;:::i;:::-;;40965:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40123:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14887:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36768:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39236:879;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41347:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18581:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40648:110;;;;;;;;;;;;;:::i;:::-;;36530:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41839:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42087:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40218:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37355:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40319:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36677:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36597:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37178:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38077:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41122:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18823:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36631:39;;;;;;;;;;;;;:::o;14527:244::-;14612:4;14666:10;14651:25;;:11;:25;;;;:68;;;;14709:10;14694:25;;:11;:25;;;;14651:68;:111;;;;14752:10;14737:25;;:11;:25;;;;14651:111;14631:131;;14527:244;;;:::o;14779:100::-;14833:13;14866:5;14859:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:100;:::o;18355:218::-;18431:7;18456:16;18464:7;18456;:16::i;:::-;18451:64;;18481:34;;;;;;;;;;;;;;18451:64;18535:15;:24;18551:7;18535:24;;;;;;;;;;;:30;;;;;;;;;;;;18528:37;;18355:218;;;:::o;17939:408::-;18028:13;18044:16;18052:7;18044;:16::i;:::-;18028:32;;18100:5;18077:28;;:19;:17;:19::i;:::-;:28;;;18073:175;;18125:44;18142:5;18149:19;:17;:19::i;:::-;18125:16;:44::i;:::-;18120:128;;18197:35;;;;;;;;;;;;;;18120:128;18073:175;18293:2;18260:15;:24;18276:7;18260:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18331:7;18327:2;18311:28;;18320:5;18311:28;;;;;;;;;;;;18017:330;17939:408;;:::o;40519:121::-;609:13;:11;:13::i;:::-;40619::::1;40604:12;:28;;;;;;;;;;;;:::i;:::-;;40519:121:::0;:::o;36719:40::-;;;;:::o;12890:180::-;12951:7;13036:15;:13;:15::i;:::-;13021:12;;13005:13;;:28;:46;12998:53;;12890:180;:::o;36478:45::-;;;;;;;;;;;;;;;;;:::o;41465:175::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;41595:37:::1;41614:4;41620:2;41624:7;41595:18;:37::i;:::-;41465:175:::0;;;:::o;40766:191::-;609:13;:11;:13::i;:::-;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;40835:12:::2;40853:10;:15;;40876:21;40853:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40834:68;;;40921:7;40913:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;40823:134;1515:1:::1;1830:7;:22;;;;40766:191::o:0;37134:36::-;;;;:::o;40422:89::-;609:13;:11;:13::i;:::-;40498:5:::1;40485:10;:18;;;;40422:89:::0;:::o;41648:183::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;41782:41:::1;41805:4;41811:2;41815:7;41782:22;:41::i;:::-;41648:183:::0;;;:::o;36557:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41227:112::-;609:13;:11;:13::i;:::-;41319:12:::1;41304;:27;;;;;;:::i;:::-;;41227:112:::0;:::o;36440:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15427:152::-;15499:7;15542:27;15561:7;15542:18;:27::i;:::-;15519:52;;15427:152;;;:::o;13355:233::-;13427:7;13468:1;13451:19;;:5;:19;;;13447:60;;13479:28;;;;;;;;;;;;;;13447:60;11163:13;13525:18;:25;13544:5;13525:25;;;;;;;;;;;;;;;;:55;13518:62;;13355:233;;;:::o;885:103::-;609:13;:11;:13::i;:::-;950:30:::1;977:1;950:18;:30::i;:::-;885:103::o:0;40965:149::-;609:13;:11;:13::i;:::-;41067:8:::1;41056;:19;;;;;;:::i;:::-;;41097:9;41086:8;;:20;;;;;;;;;;;;;;;;;;40965:149:::0;;:::o;40123:87::-;609:13;:11;:13::i;:::-;40197:5:::1;40185:9;:17;;;;40123:87:::0;:::o;650:::-;696:7;723:6;;;;;;;;;;;716:13;;650:87;:::o;14887:104::-;14943:13;14976:7;14969:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14887:104;:::o;36768:357::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39236:879::-;37678:10;37665:23;;:9;:23;;;37657:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1:::1;1717:7;;:19:::0;1709:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:1;1785:7;:18;;;;39369:19:::2;;;;;;;;;;;39361:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:15;;39447:8;39431:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;39423:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39549:22;;39537:8;39513:21;39523:10;39513:9;:21::i;:::-;:32;;;;:::i;:::-;:58;;39505:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39611:8;39622;:6;:8::i;:::-;39611:19;;39662:24;39672:8;39682:3;39662:9;:24::i;:::-;39649:9;:37;;39641:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39725:31;39735:10;39747:8;39725:9;:31::i;:::-;39773:3;39769:337;;;39859:9;;39831:13;:25;39845:10;39831:25;;;;;;;;;;;;;;;;39820:8;:36;;;;:::i;:::-;:48;:99;;39894:13;:25;39908:10;39894:25;;;;;;;;;;;;;;;;39883:8;:36;;;;:::i;:::-;39820:99;;;39871:9;;39820:99;39792:13;:25;39806:10;39792:25;;;;;;;;;;;;;;;:127;;;;39769:337;;;40028:12;;40000:13;:25;40014:10;40000:25;;;;;;;;;;;;;;;;39989:8;:36;;;;:::i;:::-;:51;:105;;40069:13;:25;40083:10;40069:25;;;;;;;;;;;;;;;;40058:8;:36;;;;:::i;:::-;39989:105;;;40043:12;;39989:105;39961:13;:25;39975:10;39961:25;;;;;;;;;;;;;;;:133;;;;39769:337;39350:765;1515:1:::1;1830:7;:22;;;;39236:879:::0;:::o;41347:110::-;609:13;:11;:13::i;:::-;41445:4:::1;41420:22;:29;;;;41347:110:::0;:::o;18581:234::-;18728:8;18676:18;:39;18695:19;:17;:19::i;:::-;18676:39;;;;;;;;;;;;;;;:49;18716:8;18676:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;18788:8;18752:55;;18767:19;:17;:19::i;:::-;18752:55;;;18798:8;18752:55;;;;;;:::i;:::-;;;;;;;;18581:234;;:::o;40648:110::-;609:13;:11;:13::i;:::-;40731:19:::1;;;;;;;;;;;40730:20;40708:19;;:42;;;;;;;;;;;;;;;;;;40648:110::o:0;36530:20::-;;;;;;;;;;;;;:::o;41839:240::-;31139:1;30350:42;31093:43;;;:47;31089:225;;;30350:42;31162:40;;;31211:4;31218:10;31162:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31157:146;;31276:10;31257:30;;;;;;;;;;;:::i;:::-;;;;;;;;31157:146;31089:225;42024:47:::1;42047:4;42053:2;42057:7;42066:4;42024:22;:47::i;:::-;41839:240:::0;;;;:::o;42087:331::-;42199:13;42234:8;;;;;;;;;;;42230:181;;;42307:8;42317:26;42334:8;42317:16;:26::i;:::-;42290:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42259:86;;;;42230:181;42385:14;42378:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42087:331;;;;:::o;40218:93::-;609:13;:11;:13::i;:::-;40298:5:::1;40283:12;:20;;;;40218:93:::0;:::o;37355:259::-;609:13;:11;:13::i;:::-;37487:15:::1;;37475:8;37459:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;37437:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;37577:29;37587:8;37597;37577:9;:29::i;:::-;37355:259:::0;;:::o;40319:95::-;609:13;:11;:13::i;:::-;40401:5:::1;40385:13;:21;;;;40319:95:::0;:::o;36677:34::-;;;;:::o;36597:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37178:38::-;;;;:::o;38077:580::-;38131:7;38150:8;38161;:6;:8::i;:::-;38150:19;;38184:3;38180:469;;;38203:14;38232:13;:25;38246:10;38232:25;;;;;;;;;;;;;;;;38220:9;;:37;;;;:::i;:::-;38203:54;;38288:8;38276:9;:20;38272:68;;;38323:1;38316:8;;;;;;38272:68;38386:9;38375:8;:20;;;;:::i;:::-;38361:10;;:35;;;;:::i;:::-;38354:42;;;;;;38180:469;38438:14;38470:13;:25;38484:10;38470:25;;;;;;;;;;;;;;;;38455:12;;:40;;;;:::i;:::-;38438:57;;38526:8;38514:9;:20;38510:68;;;38561:1;38554:8;;;;;;38510:68;38627:9;38616:8;:20;;;;:::i;:::-;38599:13;;:38;;;;:::i;:::-;38592:45;;;;38077:580;;;;:::o;41122:97::-;41166:13;41199:12;41192:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41122:97;:::o;18823:164::-;18920:4;18944:18;:25;18963:5;18944:25;;;;;;;;;;;;;;;:35;18970:8;18944:35;;;;;;;;;;;;;;;;;;;;;;;;;18937:42;;18823:164;;;;:::o;998:201::-;609:13;:11;:13::i;:::-;1107:1:::1;1087:22;;:8;:22;;::::0;1079:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1163:28;1182:8;1163:18;:28::i;:::-;998:201:::0;:::o;18995:282::-;19060:4;19116:7;19097:15;:13;:15::i;:::-;:26;;:66;;;;;19150:13;;19140:7;:23;19097:66;:153;;;;;19249:1;11537:8;19201:17;:26;19219:7;19201:26;;;;;;;;;;;;:44;:49;19097:153;19077:173;;18995:282;;;:::o;29375:105::-;29435:7;29462:10;29455:17;;29375:105;:::o;745:132::-;820:12;:10;:12::i;:::-;809:23;;:7;:5;:7::i;:::-;:23;;;801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;745:132::o;12679:92::-;12735:7;12679:92;:::o;20090:1651::-;20232:27;20262;20281:7;20262:18;:27::i;:::-;20232:57;;20347:4;20306:45;;20322:19;20306:45;;;20302:86;;20360:28;;;;;;;;;;;;;;20302:86;20402:27;20431:23;20458:35;20485:7;20458:26;:35::i;:::-;20401:92;;;;20511:68;20536:15;20553:4;20559:19;:17;:19::i;:::-;20511:24;:68::i;:::-;20506:180;;20599:43;20616:4;20622:19;:17;:19::i;:::-;20599:16;:43::i;:::-;20594:92;;20651:35;;;;;;;;;;;;;;20594:92;20506:180;20717:1;20703:16;;:2;:16;;;20699:52;;20728:23;;;;;;;;;;;;;;20699:52;20764:43;20786:4;20792:2;20796:7;20805:1;20764:21;:43::i;:::-;20847:15;20844:85;;;20912:1;20891:19;20884:30;20844:85;20981:18;:24;21000:4;20981:24;;;;;;;;;;;;;;;;20979:26;;;;;;;;;;;;21023:18;:22;21042:2;21023:22;;;;;;;;;;;;;;;;21021:24;;;;;;;;;;;21092:146;21129:2;21178:45;21193:4;21199:2;21203:19;21178:14;:45::i;:::-;11671:8;21150:73;21092:18;:146::i;:::-;21063:17;:26;21081:7;21063:26;;;;;;;;;;;:175;;;;21310:1;11671:8;21259:19;:47;:52;21255:370;;21332:19;21364:1;21354:7;:11;21332:33;;21424:1;21390:17;:30;21408:11;21390:30;;;;;;;;;;;;:35;21386:224;;21471:13;;21456:11;:28;21452:139;;21548:19;21515:17;:30;21533:11;21515:30;;;;;;;;;;;:52;;;;21452:139;21386:224;21313:312;21255:370;21672:7;21668:2;21653:27;;21662:4;21653:27;;;;;;;;;;;;21691:42;21712:4;21718:2;21722:7;21731:1;21691:20;:42::i;:::-;20221:1520;;;20090:1651;;;:::o;21749:193::-;21895:39;21912:4;21918:2;21922:7;21895:39;;;;;;;;;;;;:16;:39::i;:::-;21749:193;;;:::o;16134:633::-;16201:7;16221:12;16236:7;16221:22;;16304:4;16285:15;:13;:15::i;:::-;:23;16281:419;;16338:13;;16331:4;:20;16327:373;;;16376:14;16393:17;:23;16411:4;16393:23;;;;;;;;;;;;16376:40;;16473:1;11537:8;16445:6;:24;:29;16441:240;;16505:113;16522:1;16512:6;:11;16505:113;;16565:17;:25;16583:6;;;;;;;16565:25;;;;;;;;;;;;16556:34;;16505:113;;;16651:6;16644:13;;;;;;16441:240;16353:347;16327:373;16281:419;16728:31;;;;;;;;;;;;;;16134:633;;;;:::o;1207:191::-;1281:16;1300:6;;;;;;;;;;;1281:25;;1326:8;1317:6;;:17;;;;;;;;;;;;;;;;;;1381:8;1350:40;;1371:8;1350:40;;;;;;;;;;;;1270:128;1207:191;:::o;37751:318::-;37792:4;37809:8;37820:5;37809:16;;37843:9;37838:201;37862:12;:19;;;;37858:1;:23;37838:201;;;37957:1;37916:12;37929:1;37916:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37907:35;;;37943:10;37907:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;37903:125;;;37984:4;37978:10;;38007:5;;37903:125;37883:3;;;;;:::i;:::-;;;;37838:201;;;;38058:3;38051:10;;;37751:318;:::o;38665:563::-;38732:7;38755:3;38751:469;;;38774:14;38803:13;:25;38817:10;38803:25;;;;;;;;;;;;;;;;38791:9;;:37;;;;:::i;:::-;38774:54;;38859:8;38847:9;:20;38843:68;;;38894:1;38887:8;;;;;38843:68;38957:9;38946:8;:20;;;;:::i;:::-;38932:10;;:35;;;;:::i;:::-;38925:42;;;;;38751:469;39009:14;39041:13;:25;39055:10;39041:25;;;;;;;;;;;;;;;;39026:12;;:40;;;;:::i;:::-;39009:57;;39097:8;39085:9;:20;39081:68;;;39132:1;39125:8;;;;;39081:68;39198:9;39187:8;:20;;;;:::i;:::-;39170:13;;:38;;;;:::i;:::-;39163:45;;;38665:563;;;;;:::o;26528:112::-;26605:27;26615:2;26619:8;26605:27;;;;;;;;;;;;:9;:27::i;:::-;26528:112;;:::o;21950:407::-;22125:31;22138:4;22144:2;22148:7;22125:12;:31::i;:::-;22189:1;22171:2;:14;;;:19;22167:183;;22210:56;22241:4;22247:2;22251:7;22260:5;22210:30;:56::i;:::-;22205:145;;22294:40;;;;;;;;;;;;;;22205:145;22167:183;21950:407;;;;:::o;2034:534::-;2090:13;2131:1;2122:5;:10;2118:53;;2149:10;;;;;;;;;;;;;;;;;;;;;2118:53;2181:12;2196:5;2181:20;;2212:14;2237:78;2252:1;2244:4;:9;2237:78;;2270:8;;;;;:::i;:::-;;;;2301:2;2293:10;;;;;:::i;:::-;;;2237:78;;;2325:19;2357:6;2347:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2325:39;;2375:154;2391:1;2382:5;:10;2375:154;;2419:1;2409:11;;;;;:::i;:::-;;;2486:2;2478:5;:10;;;;:::i;:::-;2465:2;:24;;;;:::i;:::-;2452:39;;2435:6;2442;2435:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2515:2;2506:11;;;;;:::i;:::-;;;2375:154;;;2553:6;2539:21;;;;;2034:534;;;;:::o;98:98::-;151:7;178:10;171:17;;98:98;:::o;19690:392::-;19792:27;19821:23;19862:38;19903:15;:24;19919:7;19903:24;;;;;;;;;;;19862:65;;19987:18;19964:41;;20044:19;20038:26;20019:45;;19949:126;19690:392;;;:::o;19285:397::-;19434:11;19504:16;19497:5;19493:28;19484:37;;19565:16;19554:9;19550:32;19537:45;;19647:15;19636:9;19633:30;19625:5;19614:9;19611:20;19608:56;19598:66;;19285:397;;;;;:::o;22365:159::-;;;;;:::o;29056:311::-;29191:7;29211:16;11734:3;29237:19;:41;;29211:68;;11734:3;29305:31;29316:4;29322:2;29326:9;29305:10;:31::i;:::-;29297:40;;:62;;29290:69;;;29056:311;;;;;:::o;17149:450::-;17229:14;17397:16;17390:5;17386:28;17377:37;;17574:5;17560:11;17535:23;17531:41;17528:52;17521:5;17518:63;17508:73;;17149:450;;;;:::o;22532:158::-;;;;;:::o;25831:689::-;25962:19;25968:2;25972:8;25962:5;:19::i;:::-;26041:1;26023:2;:14;;;:19;26019:483;;26063:11;26077:13;;26063:27;;26109:13;26131:8;26125:3;:14;26109:30;;26158:233;26189:62;26228:1;26232:2;26236:7;;;;;;26245:5;26189:30;:62::i;:::-;26184:167;;26287:40;;;;;;;;;;;;;;26184:167;26386:3;26378:5;:11;26158:233;;26473:3;26456:13;;:20;26452:34;;26478:8;;;26452:34;26044:458;;26019:483;25831:689;;;:::o;22698:716::-;22861:4;22907:2;22882:45;;;22928:19;:17;:19::i;:::-;22949:4;22955:7;22964:5;22882:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22878:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23182:1;23165:6;:13;:18;23161:235;;23211:40;;;;;;;;;;;;;;23161:235;23354:6;23348:13;23339:6;23335:2;23331:15;23324:38;22878:529;23051:54;;;23041:64;;;:6;:64;;;;23034:71;;;22698:716;;;;;;:::o;28901:147::-;29038:6;28901:147;;;;;:::o;23422:1442::-;23495:20;23518:13;;23495:36;;23558:1;23546:8;:13;23542:44;;23568:18;;;;;;;;;;;;;;23542:44;23599:61;23629:1;23633:2;23637:12;23651:8;23599:21;:61::i;:::-;23769:1;11234:2;23739:1;:26;;23738:32;23726:8;:45;23700:18;:22;23719:2;23700:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;23822:139;23859:2;23913:33;23936:1;23940:2;23944:1;23913:14;:33::i;:::-;23880:30;23901:8;23880:20;:30::i;:::-;:66;23822:18;:139::i;:::-;23788:17;:31;23806:12;23788:31;;;;;;;;;;;:173;;;;23978:16;24009:11;24038:8;24023:12;:23;24009:37;;24113:16;24109:2;24105:25;24093:37;;24333:12;24301:8;24276:1;24227:25;24202:1;24177;24150:215;24445:1;24431:12;24427:20;24385:279;24486:3;24477:7;24474:16;24385:279;;24637:7;24627:8;24624:1;24597:25;24594:1;24591;24586:59;24539:1;24530:7;24526:15;24515:26;;24385:279;;;24389:77;24709:1;24697:8;:13;24693:45;;24719:19;;;;;;;;;;;;;;24693:45;24771:3;24755:13;:19;;;;23673:1113;;24796:60;24825:1;24829:2;24833:12;24847:8;24796:20;:60::i;:::-;23484:1380;23422:1442;;:::o;17607:324::-;17677:14;17910:1;17900:8;17897:15;17871:24;17867:46;17857:56;;17607:324;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:539::-;7271:6;7320:2;7308:9;7299:7;7295:23;7291:32;7288:119;;;7326:79;;:::i;:::-;7288:119;7474:1;7463:9;7459:17;7446:31;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7631:78;7701:7;7692:6;7681:9;7677:22;7631:78;:::i;:::-;7621:88;;7417:302;7187:539;;;;:::o;7732:118::-;7819:24;7837:5;7819:24;:::i;:::-;7814:3;7807:37;7732:118;;:::o;7856:222::-;7949:4;7987:2;7976:9;7972:18;7964:26;;8000:71;8068:1;8057:9;8053:17;8044:6;8000:71;:::i;:::-;7856:222;;;;:::o;8084:329::-;8143:6;8192:2;8180:9;8171:7;8167:23;8163:32;8160:119;;;8198:79;;:::i;:::-;8160:119;8318:1;8343:53;8388:7;8379:6;8368:9;8364:22;8343:53;:::i;:::-;8333:63;;8289:117;8084:329;;;;:::o;8419:619::-;8496:6;8504;8512;8561:2;8549:9;8540:7;8536:23;8532:32;8529:119;;;8567:79;;:::i;:::-;8529:119;8687:1;8712:53;8757:7;8748:6;8737:9;8733:22;8712:53;:::i;:::-;8702:63;;8658:117;8814:2;8840:53;8885:7;8876:6;8865:9;8861:22;8840:53;:::i;:::-;8830:63;;8785:118;8942:2;8968:53;9013:7;9004:6;8993:9;8989:22;8968:53;:::i;:::-;8958:63;;8913:118;8419:619;;;;;:::o;9044:117::-;9153:1;9150;9143:12;9167:308;9229:4;9319:18;9311:6;9308:30;9305:56;;;9341:18;;:::i;:::-;9305:56;9379:29;9401:6;9379:29;:::i;:::-;9371:37;;9463:4;9457;9453:15;9445:23;;9167:308;;;:::o;9481:146::-;9578:6;9573:3;9568;9555:30;9619:1;9610:6;9605:3;9601:16;9594:27;9481:146;;;:::o;9633:425::-;9711:5;9736:66;9752:49;9794:6;9752:49;:::i;:::-;9736:66;:::i;:::-;9727:75;;9825:6;9818:5;9811:21;9863:4;9856:5;9852:16;9901:3;9892:6;9887:3;9883:16;9880:25;9877:112;;;9908:79;;:::i;:::-;9877:112;9998:54;10045:6;10040:3;10035;9998:54;:::i;:::-;9717:341;9633:425;;;;;:::o;10078:340::-;10134:5;10183:3;10176:4;10168:6;10164:17;10160:27;10150:122;;10191:79;;:::i;:::-;10150:122;10308:6;10295:20;10333:79;10408:3;10400:6;10393:4;10385:6;10381:17;10333:79;:::i;:::-;10324:88;;10140:278;10078:340;;;;:::o;10424:509::-;10493:6;10542:2;10530:9;10521:7;10517:23;10513:32;10510:119;;;10548:79;;:::i;:::-;10510:119;10696:1;10685:9;10681:17;10668:31;10726:18;10718:6;10715:30;10712:117;;;10748:79;;:::i;:::-;10712:117;10853:63;10908:7;10899:6;10888:9;10884:22;10853:63;:::i;:::-;10843:73;;10639:287;10424:509;;;;:::o;10939:116::-;11009:21;11024:5;11009:21;:::i;:::-;11002:5;10999:32;10989:60;;11045:1;11042;11035:12;10989:60;10939:116;:::o;11061:133::-;11104:5;11142:6;11129:20;11120:29;;11158:30;11182:5;11158:30;:::i;:::-;11061:133;;;;:::o;11200:648::-;11275:6;11283;11332:2;11320:9;11311:7;11307:23;11303:32;11300:119;;;11338:79;;:::i;:::-;11300:119;11458:1;11483:50;11525:7;11516:6;11505:9;11501:22;11483:50;:::i;:::-;11473:60;;11429:114;11610:2;11599:9;11595:18;11582:32;11641:18;11633:6;11630:30;11627:117;;;11663:79;;:::i;:::-;11627:117;11768:63;11823:7;11814:6;11803:9;11799:22;11768:63;:::i;:::-;11758:73;;11553:288;11200:648;;;;;:::o;11854:468::-;11919:6;11927;11976:2;11964:9;11955:7;11951:23;11947:32;11944:119;;;11982:79;;:::i;:::-;11944:119;12102:1;12127:53;12172:7;12163:6;12152:9;12148:22;12127:53;:::i;:::-;12117:63;;12073:117;12229:2;12255:50;12297:7;12288:6;12277:9;12273:22;12255:50;:::i;:::-;12245:60;;12200:115;11854:468;;;;;:::o;12328:307::-;12389:4;12479:18;12471:6;12468:30;12465:56;;;12501:18;;:::i;:::-;12465:56;12539:29;12561:6;12539:29;:::i;:::-;12531:37;;12623:4;12617;12613:15;12605:23;;12328:307;;;:::o;12641:423::-;12718:5;12743:65;12759:48;12800:6;12759:48;:::i;:::-;12743:65;:::i;:::-;12734:74;;12831:6;12824:5;12817:21;12869:4;12862:5;12858:16;12907:3;12898:6;12893:3;12889:16;12886:25;12883:112;;;12914:79;;:::i;:::-;12883:112;13004:54;13051:6;13046:3;13041;13004:54;:::i;:::-;12724:340;12641:423;;;;;:::o;13083:338::-;13138:5;13187:3;13180:4;13172:6;13168:17;13164:27;13154:122;;13195:79;;:::i;:::-;13154:122;13312:6;13299:20;13337:78;13411:3;13403:6;13396:4;13388:6;13384:17;13337:78;:::i;:::-;13328:87;;13144:277;13083:338;;;;:::o;13427:943::-;13522:6;13530;13538;13546;13595:3;13583:9;13574:7;13570:23;13566:33;13563:120;;;13602:79;;:::i;:::-;13563:120;13722:1;13747:53;13792:7;13783:6;13772:9;13768:22;13747:53;:::i;:::-;13737:63;;13693:117;13849:2;13875:53;13920:7;13911:6;13900:9;13896:22;13875:53;:::i;:::-;13865:63;;13820:118;13977:2;14003:53;14048:7;14039:6;14028:9;14024:22;14003:53;:::i;:::-;13993:63;;13948:118;14133:2;14122:9;14118:18;14105:32;14164:18;14156:6;14153:30;14150:117;;;14186:79;;:::i;:::-;14150:117;14291:62;14345:7;14336:6;14325:9;14321:22;14291:62;:::i;:::-;14281:72;;14076:287;13427:943;;;;;;;:::o;14376:474::-;14444:6;14452;14501:2;14489:9;14480:7;14476:23;14472:32;14469:119;;;14507:79;;:::i;:::-;14469:119;14627:1;14652:53;14697:7;14688:6;14677:9;14673:22;14652:53;:::i;:::-;14642:63;;14598:117;14754:2;14780:53;14825:7;14816:6;14805:9;14801:22;14780:53;:::i;:::-;14770:63;;14725:118;14376:474;;;;;:::o;14856:::-;14924:6;14932;14981:2;14969:9;14960:7;14956:23;14952:32;14949:119;;;14987:79;;:::i;:::-;14949:119;15107:1;15132:53;15177:7;15168:6;15157:9;15153:22;15132:53;:::i;:::-;15122:63;;15078:117;15234:2;15260:53;15305:7;15296:6;15285:9;15281:22;15260:53;:::i;:::-;15250:63;;15205:118;14856:474;;;;;:::o;15336:180::-;15384:77;15381:1;15374:88;15481:4;15478:1;15471:15;15505:4;15502:1;15495:15;15522:320;15566:6;15603:1;15597:4;15593:12;15583:22;;15650:1;15644:4;15640:12;15671:18;15661:81;;15727:4;15719:6;15715:17;15705:27;;15661:81;15789:2;15781:6;15778:14;15758:18;15755:38;15752:84;;15808:18;;:::i;:::-;15752:84;15573:269;15522:320;;;:::o;15848:332::-;15969:4;16007:2;15996:9;15992:18;15984:26;;16020:71;16088:1;16077:9;16073:17;16064:6;16020:71;:::i;:::-;16101:72;16169:2;16158:9;16154:18;16145:6;16101:72;:::i;:::-;15848:332;;;;;:::o;16186:137::-;16240:5;16271:6;16265:13;16256:22;;16287:30;16311:5;16287:30;:::i;:::-;16186:137;;;;:::o;16329:345::-;16396:6;16445:2;16433:9;16424:7;16420:23;16416:32;16413:119;;;16451:79;;:::i;:::-;16413:119;16571:1;16596:61;16649:7;16640:6;16629:9;16625:22;16596:61;:::i;:::-;16586:71;;16542:125;16329:345;;;;:::o;16680:181::-;16820:33;16816:1;16808:6;16804:14;16797:57;16680:181;:::o;16867:366::-;17009:3;17030:67;17094:2;17089:3;17030:67;:::i;:::-;17023:74;;17106:93;17195:3;17106:93;:::i;:::-;17224:2;17219:3;17215:12;17208:19;;16867:366;;;:::o;17239:419::-;17405:4;17443:2;17432:9;17428:18;17420:26;;17492:9;17486:4;17482:20;17478:1;17467:9;17463:17;17456:47;17520:131;17646:4;17520:131;:::i;:::-;17512:139;;17239:419;;;:::o;17664:147::-;17765:11;17802:3;17787:18;;17664:147;;;;:::o;17817:114::-;;:::o;17937:398::-;18096:3;18117:83;18198:1;18193:3;18117:83;:::i;:::-;18110:90;;18209:93;18298:3;18209:93;:::i;:::-;18327:1;18322:3;18318:11;18311:18;;17937:398;;;:::o;18341:379::-;18525:3;18547:147;18690:3;18547:147;:::i;:::-;18540:154;;18711:3;18704:10;;18341:379;;;:::o;18726:166::-;18866:18;18862:1;18854:6;18850:14;18843:42;18726:166;:::o;18898:366::-;19040:3;19061:67;19125:2;19120:3;19061:67;:::i;:::-;19054:74;;19137:93;19226:3;19137:93;:::i;:::-;19255:2;19250:3;19246:12;19239:19;;18898:366;;;:::o;19270:419::-;19436:4;19474:2;19463:9;19459:18;19451:26;;19523:9;19517:4;19513:20;19509:1;19498:9;19494:17;19487:47;19551:131;19677:4;19551:131;:::i;:::-;19543:139;;19270:419;;;:::o;19695:141::-;19744:4;19767:3;19759:11;;19790:3;19787:1;19780:14;19824:4;19821:1;19811:18;19803:26;;19695:141;;;:::o;19842:93::-;19879:6;19926:2;19921;19914:5;19910:14;19906:23;19896:33;;19842:93;;;:::o;19941:107::-;19985:8;20035:5;20029:4;20025:16;20004:37;;19941:107;;;;:::o;20054:393::-;20123:6;20173:1;20161:10;20157:18;20196:97;20226:66;20215:9;20196:97;:::i;:::-;20314:39;20344:8;20333:9;20314:39;:::i;:::-;20302:51;;20386:4;20382:9;20375:5;20371:21;20362:30;;20435:4;20425:8;20421:19;20414:5;20411:30;20401:40;;20130:317;;20054:393;;;;;:::o;20453:60::-;20481:3;20502:5;20495:12;;20453:60;;;:::o;20519:142::-;20569:9;20602:53;20620:34;20629:24;20647:5;20629:24;:::i;:::-;20620:34;:::i;:::-;20602:53;:::i;:::-;20589:66;;20519:142;;;:::o;20667:75::-;20710:3;20731:5;20724:12;;20667:75;;;:::o;20748:269::-;20858:39;20889:7;20858:39;:::i;:::-;20919:91;20968:41;20992:16;20968:41;:::i;:::-;20960:6;20953:4;20947:11;20919:91;:::i;:::-;20913:4;20906:105;20824:193;20748:269;;;:::o;21023:73::-;21068:3;21023:73;:::o;21102:189::-;21179:32;;:::i;:::-;21220:65;21278:6;21270;21264:4;21220:65;:::i;:::-;21155:136;21102:189;;:::o;21297:186::-;21357:120;21374:3;21367:5;21364:14;21357:120;;;21428:39;21465:1;21458:5;21428:39;:::i;:::-;21401:1;21394:5;21390:13;21381:22;;21357:120;;;21297:186;;:::o;21489:543::-;21590:2;21585:3;21582:11;21579:446;;;21624:38;21656:5;21624:38;:::i;:::-;21708:29;21726:10;21708:29;:::i;:::-;21698:8;21694:44;21891:2;21879:10;21876:18;21873:49;;;21912:8;21897:23;;21873:49;21935:80;21991:22;22009:3;21991:22;:::i;:::-;21981:8;21977:37;21964:11;21935:80;:::i;:::-;21594:431;;21579:446;21489:543;;;:::o;22038:117::-;22092:8;22142:5;22136:4;22132:16;22111:37;;22038:117;;;;:::o;22161:169::-;22205:6;22238:51;22286:1;22282:6;22274:5;22271:1;22267:13;22238:51;:::i;:::-;22234:56;22319:4;22313;22309:15;22299:25;;22212:118;22161:169;;;;:::o;22335:295::-;22411:4;22557:29;22582:3;22576:4;22557:29;:::i;:::-;22549:37;;22619:3;22616:1;22612:11;22606:4;22603:21;22595:29;;22335:295;;;;:::o;22635:1395::-;22752:37;22785:3;22752:37;:::i;:::-;22854:18;22846:6;22843:30;22840:56;;;22876:18;;:::i;:::-;22840:56;22920:38;22952:4;22946:11;22920:38;:::i;:::-;23005:67;23065:6;23057;23051:4;23005:67;:::i;:::-;23099:1;23123:4;23110:17;;23155:2;23147:6;23144:14;23172:1;23167:618;;;;23829:1;23846:6;23843:77;;;23895:9;23890:3;23886:19;23880:26;23871:35;;23843:77;23946:67;24006:6;23999:5;23946:67;:::i;:::-;23940:4;23933:81;23802:222;23137:887;;23167:618;23219:4;23215:9;23207:6;23203:22;23253:37;23285:4;23253:37;:::i;:::-;23312:1;23326:208;23340:7;23337:1;23334:14;23326:208;;;23419:9;23414:3;23410:19;23404:26;23396:6;23389:42;23470:1;23462:6;23458:14;23448:24;;23517:2;23506:9;23502:18;23489:31;;23363:4;23360:1;23356:12;23351:17;;23326:208;;;23562:6;23553:7;23550:19;23547:179;;;23620:9;23615:3;23611:19;23605:26;23663:48;23705:4;23697:6;23693:17;23682:9;23663:48;:::i;:::-;23655:6;23648:64;23570:156;23547:179;23772:1;23768;23760:6;23756:14;23752:22;23746:4;23739:36;23174:611;;;23137:887;;22727:1303;;;22635:1395;;:::o;24036:180::-;24176:32;24172:1;24164:6;24160:14;24153:56;24036:180;:::o;24222:366::-;24364:3;24385:67;24449:2;24444:3;24385:67;:::i;:::-;24378:74;;24461:93;24550:3;24461:93;:::i;:::-;24579:2;24574:3;24570:12;24563:19;;24222:366;;;:::o;24594:419::-;24760:4;24798:2;24787:9;24783:18;24775:26;;24847:9;24841:4;24837:20;24833:1;24822:9;24818:17;24811:47;24875:131;25001:4;24875:131;:::i;:::-;24867:139;;24594:419;;;:::o;25019:169::-;25159:21;25155:1;25147:6;25143:14;25136:45;25019:169;:::o;25194:366::-;25336:3;25357:67;25421:2;25416:3;25357:67;:::i;:::-;25350:74;;25433:93;25522:3;25433:93;:::i;:::-;25551:2;25546:3;25542:12;25535:19;;25194:366;;;:::o;25566:419::-;25732:4;25770:2;25759:9;25755:18;25747:26;;25819:9;25813:4;25809:20;25805:1;25794:9;25790:17;25783:47;25847:131;25973:4;25847:131;:::i;:::-;25839:139;;25566:419;;;:::o;25991:180::-;26039:77;26036:1;26029:88;26136:4;26133:1;26126:15;26160:4;26157:1;26150:15;26177:191;26217:3;26236:20;26254:1;26236:20;:::i;:::-;26231:25;;26270:20;26288:1;26270:20;:::i;:::-;26265:25;;26313:1;26310;26306:9;26299:16;;26334:3;26331:1;26328:10;26325:36;;;26341:18;;:::i;:::-;26325:36;26177:191;;;;:::o;26374:163::-;26514:15;26510:1;26502:6;26498:14;26491:39;26374:163;:::o;26543:366::-;26685:3;26706:67;26770:2;26765:3;26706:67;:::i;:::-;26699:74;;26782:93;26871:3;26782:93;:::i;:::-;26900:2;26895:3;26891:12;26884:19;;26543:366;;;:::o;26915:419::-;27081:4;27119:2;27108:9;27104:18;27096:26;;27168:9;27162:4;27158:20;27154:1;27143:9;27139:17;27132:47;27196:131;27322:4;27196:131;:::i;:::-;27188:139;;26915:419;;;:::o;27340:174::-;27480:26;27476:1;27468:6;27464:14;27457:50;27340:174;:::o;27520:366::-;27662:3;27683:67;27747:2;27742:3;27683:67;:::i;:::-;27676:74;;27759:93;27848:3;27759:93;:::i;:::-;27877:2;27872:3;27868:12;27861:19;;27520:366;;;:::o;27892:419::-;28058:4;28096:2;28085:9;28081:18;28073:26;;28145:9;28139:4;28135:20;28131:1;28120:9;28116:17;28109:47;28173:131;28299:4;28173:131;:::i;:::-;28165:139;;27892:419;;;:::o;28317:171::-;28457:23;28453:1;28445:6;28441:14;28434:47;28317:171;:::o;28494:366::-;28636:3;28657:67;28721:2;28716:3;28657:67;:::i;:::-;28650:74;;28733:93;28822:3;28733:93;:::i;:::-;28851:2;28846:3;28842:12;28835:19;;28494:366;;;:::o;28866:419::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:148::-;29393:11;29430:3;29415:18;;29291:148;;;;:::o;29469:874::-;29572:3;29609:5;29603:12;29638:36;29664:9;29638:36;:::i;:::-;29690:89;29772:6;29767:3;29690:89;:::i;:::-;29683:96;;29810:1;29799:9;29795:17;29826:1;29821:166;;;;30001:1;29996:341;;;;29788:549;;29821:166;29905:4;29901:9;29890;29886:25;29881:3;29874:38;29967:6;29960:14;29953:22;29945:6;29941:35;29936:3;29932:45;29925:52;;29821:166;;29996:341;30063:38;30095:5;30063:38;:::i;:::-;30123:1;30137:154;30151:6;30148:1;30145:13;30137:154;;;30225:7;30219:14;30215:1;30210:3;30206:11;30199:35;30275:1;30266:7;30262:15;30251:26;;30173:4;30170:1;30166:12;30161:17;;30137:154;;;30320:6;30315:3;30311:16;30304:23;;30003:334;;29788:549;;29576:767;;29469:874;;;;:::o;30349:390::-;30455:3;30483:39;30516:5;30483:39;:::i;:::-;30538:89;30620:6;30615:3;30538:89;:::i;:::-;30531:96;;30636:65;30694:6;30689:3;30682:4;30675:5;30671:16;30636:65;:::i;:::-;30726:6;30721:3;30717:16;30710:23;;30459:280;30349:390;;;;:::o;30745:429::-;30922:3;30944:92;31032:3;31023:6;30944:92;:::i;:::-;30937:99;;31053:95;31144:3;31135:6;31053:95;:::i;:::-;31046:102;;31165:3;31158:10;;30745:429;;;;;:::o;31180:176::-;31320:28;31316:1;31308:6;31304:14;31297:52;31180:176;:::o;31362:366::-;31504:3;31525:67;31589:2;31584:3;31525:67;:::i;:::-;31518:74;;31601:93;31690:3;31601:93;:::i;:::-;31719:2;31714:3;31710:12;31703:19;;31362:366;;;:::o;31734:419::-;31900:4;31938:2;31927:9;31923:18;31915:26;;31987:9;31981:4;31977:20;31973:1;31962:9;31958:17;31951:47;32015:131;32141:4;32015:131;:::i;:::-;32007:139;;31734:419;;;:::o;32159:194::-;32199:4;32219:20;32237:1;32219:20;:::i;:::-;32214:25;;32253:20;32271:1;32253:20;:::i;:::-;32248:25;;32297:1;32294;32290:9;32282:17;;32321:1;32315:4;32312:11;32309:37;;;32326:18;;:::i;:::-;32309:37;32159:194;;;;:::o;32359:410::-;32399:7;32422:20;32440:1;32422:20;:::i;:::-;32417:25;;32456:20;32474:1;32456:20;:::i;:::-;32451:25;;32511:1;32508;32504:9;32533:30;32551:11;32533:30;:::i;:::-;32522:41;;32712:1;32703:7;32699:15;32696:1;32693:22;32673:1;32666:9;32646:83;32623:139;;32742:18;;:::i;:::-;32623:139;32407:362;32359:410;;;;:::o;32775:225::-;32915:34;32911:1;32903:6;32899:14;32892:58;32984:8;32979:2;32971:6;32967:15;32960:33;32775:225;:::o;33006:366::-;33148:3;33169:67;33233:2;33228:3;33169:67;:::i;:::-;33162:74;;33245:93;33334:3;33245:93;:::i;:::-;33363:2;33358:3;33354:12;33347:19;;33006:366;;;:::o;33378:419::-;33544:4;33582:2;33571:9;33567:18;33559:26;;33631:9;33625:4;33621:20;33617:1;33606:9;33602:17;33595:47;33659:131;33785:4;33659:131;:::i;:::-;33651:139;;33378:419;;;:::o;33803:182::-;33943:34;33939:1;33931:6;33927:14;33920:58;33803:182;:::o;33991:366::-;34133:3;34154:67;34218:2;34213:3;34154:67;:::i;:::-;34147:74;;34230:93;34319:3;34230:93;:::i;:::-;34348:2;34343:3;34339:12;34332:19;;33991:366;;;:::o;34363:419::-;34529:4;34567:2;34556:9;34552:18;34544:26;;34616:9;34610:4;34606:20;34602:1;34591:9;34587:17;34580:47;34644:131;34770:4;34644:131;:::i;:::-;34636:139;;34363:419;;;:::o;34788:180::-;34836:77;34833:1;34826:88;34933:4;34930:1;34923:15;34957:4;34954:1;34947:15;34974:143;35031:5;35062:6;35056:13;35047:22;;35078:33;35105:5;35078:33;:::i;:::-;34974:143;;;;:::o;35123:351::-;35193:6;35242:2;35230:9;35221:7;35217:23;35213:32;35210:119;;;35248:79;;:::i;:::-;35210:119;35368:1;35393:64;35449:7;35440:6;35429:9;35425:22;35393:64;:::i;:::-;35383:74;;35339:128;35123:351;;;;:::o;35480:233::-;35519:3;35542:24;35560:5;35542:24;:::i;:::-;35533:33;;35588:66;35581:5;35578:77;35575:103;;35658:18;;:::i;:::-;35575:103;35705:1;35698:5;35694:13;35687:20;;35480:233;;;:::o;35719:180::-;35767:77;35764:1;35757:88;35864:4;35861:1;35854:15;35888:4;35885:1;35878:15;35905:185;35945:1;35962:20;35980:1;35962:20;:::i;:::-;35957:25;;35996:20;36014:1;35996:20;:::i;:::-;35991:25;;36035:1;36025:35;;36040:18;;:::i;:::-;36025:35;36082:1;36079;36075:9;36070:14;;35905:185;;;;:::o;36096:176::-;36128:1;36145:20;36163:1;36145:20;:::i;:::-;36140:25;;36179:20;36197:1;36179:20;:::i;:::-;36174:25;;36218:1;36208:35;;36223:18;;:::i;:::-;36208:35;36264:1;36261;36257:9;36252:14;;36096:176;;;;:::o;36278:98::-;36329:6;36363:5;36357:12;36347:22;;36278:98;;;:::o;36382:168::-;36465:11;36499:6;36494:3;36487:19;36539:4;36534:3;36530:14;36515:29;;36382:168;;;;:::o;36556:373::-;36642:3;36670:38;36702:5;36670:38;:::i;:::-;36724:70;36787:6;36782:3;36724:70;:::i;:::-;36717:77;;36803:65;36861:6;36856:3;36849:4;36842:5;36838:16;36803:65;:::i;:::-;36893:29;36915:6;36893:29;:::i;:::-;36888:3;36884:39;36877:46;;36646:283;36556:373;;;;:::o;36935:640::-;37130:4;37168:3;37157:9;37153:19;37145:27;;37182:71;37250:1;37239:9;37235:17;37226:6;37182:71;:::i;:::-;37263:72;37331:2;37320:9;37316:18;37307:6;37263:72;:::i;:::-;37345;37413:2;37402:9;37398:18;37389:6;37345:72;:::i;:::-;37464:9;37458:4;37454:20;37449:2;37438:9;37434:18;37427:48;37492:76;37563:4;37554:6;37492:76;:::i;:::-;37484:84;;36935:640;;;;;;;:::o;37581:141::-;37637:5;37668:6;37662:13;37653:22;;37684:32;37710:5;37684:32;:::i;:::-;37581:141;;;;:::o;37728:349::-;37797:6;37846:2;37834:9;37825:7;37821:23;37817:32;37814:119;;;37852:79;;:::i;:::-;37814:119;37972:1;37997:63;38052:7;38043:6;38032:9;38028:22;37997:63;:::i;:::-;37987:73;;37943:127;37728:349;;;;:::o

Swarm Source

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